diff 函数说文件在复制时是不同的

diff function says files are different when they are copies

我有一个 perl 脚本,可以计算文本文件中的双峰,并总结结果。这适用于我的模拟数据集 (a.txt)。该文件是一个简短的字母列表。我的真实数据 (winningStreak.txt) 更长,perl 脚本无法读取文件。

alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ perl doublet.pl a.txt
Name a file to save the results in
b.txt
alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ perl doublet.pl winningStreak.txt
Name a file to save the results in
b.txt

我认为我的脚本有问题,所以我将 a.txt 复制并粘贴到 winningStreak.txt 中。我的 perl 脚本又没有读取文件信息。

我运行

alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ diff a.txt winningStreak.txt 
1,5c1,5
< w
< w
< l
< l
< 
---
> w
> w
> l
> l
> 

并且一切都被认为是不同的,即使它只是被复制和粘贴。有谁知道我如何解决这个问题,因为我的真实数据 (streak.txt) 比我的模拟集 (a.txt) 长得多。

alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ hexdump -C a.txt winningStreak.txt 
00000000 77 0d 0a 77 0d 0a 6c 0d 0a 6c 0d 0a 0d 0a 77 0a |w..w..l..l....w.| 
00000010 77 0a 6c 0a 6c 0a 0a |w.l.l..| 
00000017

很明显,非打印字符肯定是有区别的。一个有 Windows 行结尾 (CRLF),另一个有 unix 行结尾 (LF)。

使用 dos2unix 或其他工具进行转换,或者使用 s/\s+\z// 而不是 chomp 来删除行尾。

正如@ikegami 所说,解决方案是 dos2unix。正如@Сухой27 所说,我使用修改过的 perl 脚本来更改 CR。

我运行

alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ perl -i -p -e 's/\n/\r\n/' winningStreak.txt

它改变了结尾,所以我的 perl 脚本可以工作。

感谢大家的帮助!