我使用C来解析大型平面文件并将相关行输出到输出文件中。输出文件应该是大约70,000行。
如果我在gedit中打开文件,它会完全按预期显示,并显示正确的行数和行长度。
但是,运行wc -l <file>
会返回13,156。 grep -c "" <file>
也是如此。
tail <file>
返回我在gedit中看到的最后10行。 head <file>
返回前10行。但tail -n +8000 | head -n 1
,它应该返回第8,000行,返回我在gedit第34,804行看到的文本。
如果我在文件中缺少换行符,我会期待这些结果。但是gedit似乎没有问题。此外,显示最大行长度的wc -L <file>
按预期返回142个字节。该文件的大小略大于9,000,000字节,正如预期的那样。
如果wc -L <file>
= 142,wc -c <file>
= 9046609,那么wc -l <file>
= 13156怎么办?
有人知道写这个文件时我做错了吗?
答案 0 :(得分:3)
这可能是return('\ r')和换行('\ n')字符的奇怪组合。
假设你有GNU Coreutils版本的“tr”,你可以使用这些命令来计算文件中每个字符的数量:
tr -d -c '\n' FILE | wc -c
tr -d -c '\r' FILE | wc -c
对于普通的Unix风格的文本文件,第二个命令应该打印0.对于Windows风格的文本文件,两者都应该打印相同的数字。
“file”命令也可能会告诉你一些有用的东西。