3

我正在使用 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,那么怎么可能=13156wc -l <file>呢?

有谁知道我在写入这个文件时做错了什么?

4

1 回答 1

3

这可能是返回 ('\r') 和换行 ('\n') 字符的一些奇怪组合。

假设您有 GNU Coreutils 版本的“tr”,您可以使用这些命令来计算文件中每个字符的数量:

tr -d -c '\n' FILE | wc -c

tr -d -c '\r' FILE | wc -c

对于普通的 Unix 风格的文本文件,第二个命令应该打印 0。对于 Windows 风格的文本文件,两个命令应该打印相同的数字。

“文件”命令也可能会告诉您一些有用的信息。

于 2011-07-23T20:26:43.410 回答