2012-10-04 71 views
9

可能重複:
bash echo number of lines of file given in a bash variable輸出數量在Unix中篩選

想知道如何輸出線在一個文本文件的數量屏幕,然後將其存儲在一個變量中。 我有一個名爲stats.txt文件,當我運行wc -l stats.txt它輸出8 stats.txt

我試圖做x = wc -l stats.txt以爲它只會存儲數量,剩下的只是視覺,但它不工作:(

感謝您的幫助

+2

'x = $(wc -l <​​stats.txt)''? –

+0

一個bash教程可以幫助你:http://tldp.org/LDP/Bash-Beginners-Guide/html/ –

回答

2

,你可以嘗試:

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

或(從another.anon.coward的評論):

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

你可以不用'cat'&pipe來做'x = $(wc -l <​​stats .txt)' –

+0

@gokcehan當我跑了它---- cat coursefile.txt | wc -l -----它工作。但是,當我試圖存儲它時,我得到了一個錯誤:-bash:x:命令未找到 – Masterminder

+0

不要忘記反引號('') – none

16

有做這個兩個POSIX標準語法:

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

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

它們都運行該程序,並用命令的標準輸出替換調用腳本,在這種情況下將其分配給$x變量。但是,請注意,這兩個修剪結束換行符(這實際上是你想要在這裏,但有時,當你期望換行符時,可能會很危險)。

此外,第二種情況可以很容易嵌套(例如:$(cat $(ls | head -n 1) | wc -l))。你也可以用第一種方法做,但它更復雜:

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

也有引用問題。您可以包括雙引號內的這些表述,但隨着反單引號,你必須繼續命令內引用,而使用括號讓你「開始新的報價」組:

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

希望這有助於=)

+0

感謝您的幫助 – Masterminder

+2

不需要'貓'或任何重定向/管道 - 只需要:x = $(wc -l /path/to/file.txt) –