来自C程序的文件输出在计数行时奇怪地表现

时间:2011-07-23 19:19:35

标签: c count line wc

我使用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怎么办?

有人知道写这个文件时我做错了吗?

1 个答案:

答案 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”命令也可能会告诉你一些有用的东西。