2012-10-04 32 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) –