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

时间:2015-01-09 13:12:47

标签: perl diff

我有一个perl脚本,它在文本文件中计算doublets,并总结结果。这在我的模拟数据集(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复制并粘贴到winnerStreak.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

2 个答案:

答案 0 :(得分:4)

显然,不可打印的字符必须有区别。一个具有Windows行结尾(CRLF),另一个具有unix行结尾(LF)。

使用dos2unix或其他工具进行转换,或使用s/\s+\z//代替chomp删除行结尾。

答案 1 :(得分:0)

正如@ikegami所说,解决方案是dos2unix。我使用了一个修改过的perl脚本来改变CR,就像@Сухой27所说的那样。

我跑了

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

它改变了结尾,以便我的perl脚本有效。

感谢您的帮助!