将wc的结果存储在变量中

时间:2014-02-26 18:58:41

标签: shell terminal

我在尝试:

y=$(wc -l email.txt)

它给出了行数和文件名email.txt。我不明白为什么。

我正在使用ubuntu 13.04

2 个答案:

答案 0 :(得分:1)

如果以文件名作为参数调用wc,它会打印该文件名以及文件中的行数,单词和字符数(如果使用{{,则只打印行数{} 1}})。

如果从文件中运行wc -l及其输入重定向,则wc -l命令无法访问文件名,因此不会打印它

特别是,如果您使用wc,则会打印 行数(后跟换行符);没有多余的空白,至少我使用的wc -l版本。

(这有点不幸;许多Unix文本处理工具与wccommand file.txt的行为方式相同,但command < file.txt没有。)

所以你需要的只是:

wc

如果由于某种原因你还想传递y=$(wc -l < email.txt) 作为命令行参数,你可以使用email.txt来选择行数:

sed

y=$(wc email.txt | sed 's/ .*//') 命令更改输出

sed

1234 email.txt

并且可能对1234 以外的工具有用,无论它们如何被调用,都会打印额外的信息(例如,请参阅wc)。

答案 1 :(得分:0)

您可以使用:

y=$(wc -l < email.txt) | tr -d ' ')