wc -l 命令给出了错误的结果

21

我从wc -l命令得到了错误的结果。经过长时间的检查,我发现了问题的核心,这里是模拟:

$ echo "line with end" > file
$ echo -n "line without end" >>file
$ wc -l file
       1 file

这里有两行文字,但是最后一个 "\n" 缺失了。是否有简单的解决方法?


为什么要使用 echo -n,为什么不能在 echo -n 的结尾添加 \n - Bill
2
以上是这个问题的模拟。我没有创建这些文件,只是在处理它们。我得到了它们但是少了最后一个回车符。 - novacik
3
当你的工具箱里有锤子时,不要使用螺丝刀打钉子 :-) 你可能认为这是两行文字,但是wc命令的文档却不这样认为。 - paxdiablo
2个回答

32
< p > 对于以 "\n" 字符结尾的 < code > wc 行。其中一个解决方案是使用 grep 查找这些行,grep 不会寻找结尾的 NL。 < /p > < p > 例如: < /p >
$ grep -c . file        #count the occurrence of any character
2

以上不会计算空行。如需计算空行,请使用

$ grep -c '^' file      #count the beginnings of the lines
2

18

wc 的手册页面:

 -l, --lines
              print the newline counts

echo的手册页面中的表单

 -n     do not output the trailing newline

你的文件中有 1 个换行符,所以 wc -l 显示了 1

你可以使用以下的 awk 命令来计算行数。

 awk 'END{print NR}' file

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接