【发布时间】:2012-09-27 07:15:34
【问题描述】:
我有一个超过 60MB 的文本文件。它在 5105043 行中有条目,但是当我执行 wc -l 时,它只给出 5105042 结果,比实际结果少一个。有谁知道为什么会这样?
文件很大时是不是很常见?
【问题讨论】:
标签: unix
我有一个超过 60MB 的文本文件。它在 5105043 行中有条目,但是当我执行 wc -l 时,它只给出 5105042 结果,比实际结果少一个。有谁知道为什么会这样?
文件很大时是不是很常见?
【问题讨论】:
标签: unix
最后一行不包含新行。
获得您想要的结果的一个技巧是:
sed -n '=' <yourfile> | wc -l
这告诉sed 只是打印文件中每一行的行号,wc 然后计数。可能有更好的解决方案,但这是可行的。
【讨论】:
sed 命令的更好方法是使用awk:awk 'END { print NR }' file.txt。或者,如果您想更正您的文件,使其具有相等数量的行和换行符,请参阅下面的编辑。 HTH。
文件中的最后一行可能缺少换行符结尾。 IIRC,wc -l 仅计算文件中换行符的数量。
如果您尝试:cat -A file.txt | tail 您的最后一行是否包含尾随美元符号 ($)?
编辑:
假设您的文件中的最后一行缺少换行符,您可以附加一个换行符来更正它,如下所示:
printf "\n" >> file.txt
wc -l 的结果现在应该是一致的。
【讨论】:
cat 的所有版本。我正在使用cat (GNU coreutils) 8.17。你的有--show-all 选项吗?如果没有,您可以尝试cat -vET file.txt | tail,它应该有相同的结果,这可能适用于更多口味的cat。
dos2unix yourfile.csv。
60 MB 似乎有点大文件,但对于小文件。一种选择可能是
cat -n file.txt
或
cat -n sample.txt | cut -f1 | tail -1
【讨论】: