2012-10-04 14 views
9

Powiel możliwe:
bash echo number of lines of file given in a bash variableWyjście Ilość linii w pliku tekstowym na ekranie w Unix

Czy zastanawiasz się, w jaki sposób wyjście liczbę wierszy w pliku tekstowym na ekranie, a następnie przechowuj go w zmiennej. Mam plik o nazwie stats.txt i kiedy biegnę wc -l stats.txt wyprowadza 8 stats.txt

Próbowałem robić x = wc -l stats.txt myślenie byłoby przechowywać tylko liczby, a reszta jest tylko wizualne, ale to nie działa :(

Dzięki za pomoc

+2

Co powiedzie się na 'x = $ (wc -l

+0

Samouczek bash może Ci pomóc: http://tldp.org/LDP/Bash-Beginners-Guide/html/ –

Odpowiedz

2

można spróbować:

x=`cat stats.txt | wc -l` 

lub (z komentarzem another.anon.coward'S):

x=`wc -l < stats.txt` 
+1

Możesz to zrobić bez 'cat' & pipe jako' x = $ (wc -l

+0

@gokcehan kiedy go uruchomiłem ---- cat coursefile.txt | wc -l ----- zadziałało. jednak gdy próbowałem go zapisać, otrzymałem komunikat o błędzie: -bash: x: polecenie nie znaleziono – Masterminder

+0

nie zapomnij o backtickach ('') – none

16

Istnieją dwa POSIX standardowy składnia w ten sposób:

x=`cat stats.txt | wc -l` 

lub

x=$(cat stats.txt | wc -l) 

Obaj uruchomić program i zastąpić wywołanie w skrypcie ze standardowego wyjścia polecenia, w tym przypadku przypisanie jej do zmiennej $x. Należy jednak pamiętać, że oba linie kończące newlines (to jest to, co chcesz tutaj, ale czasami może być niebezpieczne, gdy oczekujesz nowej linii).

Również drugi przypadek można łatwo zagnieździć (przykład: $(cat $(ls | head -n 1) | wc -l)). Możesz to zrobić także w pierwszym przypadku, ale jest on bardziej złożony:

`cat \`ls | head -n 1\` | wc -l` 

Istnieją również problemy z cytatem. Można to tych wyrażeń wewnątrz podwójnych cudzysłowów, ale z back-kleszcze, należy kontynuować podając wewnątrz polecenia, natomiast za pomocą nawiasu pozwala na „start nowego cytując” grupę:

"`echo \"My string\"`" 
"$(echo "My string")" 

Hope this helps =)

+0

dzięki za pomoc – Masterminder

+2

Nie ma potrzeby "kota" ani żadnego przekierowania/rur - wystarczy zrobić: x = $ (wc -l/ścieżka/do/plik.txt) –

Powiązane problemy