我使用cat命令来连接两个文件。当我用wc进行行计数时,输出文件中的行数多于输入文件总和。
这是我尝试过的:
cat file1.data file2.data > joined.data
wc的输出是:
382200628 382200628 55947683538 file1.data
13641861 13641861 1953636328 file2.data
399077626 399077626 57901319866 joined.data
794920115 794920115 115802639732 total
因此,字节数是两个文件的总和,但行数不是。我认为cat可能会将某些内容解释为换行符。但是,如果我在独立文件上运行cat,则没有多余的行:
cat file1.data > file1Cat.data
wc file1.data file1Cat.data
385443054 385443054 55947683538 file1.data
385443054 385443054 55947683538 file1Cat.data
770886108 770886108 111895367076 total
cat file2.data > file2Cat.data
wc file2.data file2Cat.data
13641861 13641861 1953636328 file2.data
13641861 13641861 1953636328 file2Cat.data
27283722 27283722 3907272656 total
文件内容是用分号分隔的数字和十六进制字符串。这是示例行:
1559742559; 7899594; 0x2a65Aca4D5fC5B5C859090a6c34d164135398226; 0; 0xb75A82e53BCF5E25cFe15B8a014A2bBc34A468C7; 0; 254905240000000000; 1000000000; 50000; 0; 4331209
有人知道为什么会发生这种情况以及如何预防吗?
编辑: 我将文件分成许多每个1000000行的文件。在拆分文件上运行wc,其中一个文件(split_kj)显示少于1000000行。在此文件中,在某些时候,所有信息都将替换为零字节。以下文件也显示较少的行,但是信息似乎很好。复制它们后,wc输出显示1000000行。对于split_kj,问题仍然存在。这是否表明内存损坏?
...
1000000 1000000 144774157 split_ki
455140 455141 145081810 split_kj
0 0 144771155 split_kk
0 0 145471556 split_kl
0 0 144974108 split_km
0 0 145044520 split_kn
0 0 144890806 split_ko
775160 775160 145244231 split_kp
1000000 1000000 144993806 split_kq
...
编辑: SSD原来有一些坏扇区。因此,当cat的输出存储在此处时,文件可能会损坏。看来此问题与cat命令无关。