Perl diff函数表示文件在复制时是不同的

Perl diff函数表示文件在复制时是不同的,perl,diff,Perl,Diff,我有一个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/A

我有一个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
我认为我的脚本有问题,所以我复制并粘贴了一个.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
> 
alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ perl -i -p -e 's/\n/\r\n/' winningStreak.txt

显然,不可打印字符之间肯定存在差异。一个具有Windows行结束符(CRLF),另一个具有unix行结束符(LF)


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

显然,不可打印字符中一定存在差异。一个具有Windows行结束符(CRLF),另一个具有unix行结束符(LF)


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

正如@ikegami所说,解决方案是dos2unix。我使用了一个修改过的perl脚本来修改CRs,正如@ССаа27所说的

我跑

alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ diff a.txt winningStreak.txt 
1,5c1,5
< w
< w
< l
< l
< 
---
> w
> w
> l
> l
> 
alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ perl -i -p -e 's/\n/\r\n/' winningStreak.txt
它改变了结尾,这样我的perl脚本就可以工作了


谢谢你的帮助

正如@ikegami所说,解决方案是dos2unix。我使用了一个修改过的perl脚本来修改CRs,正如@ССаа27所说的

我跑

alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ diff a.txt winningStreak.txt 
1,5c1,5
< w
< w
< l
< l
< 
---
> w
> w
> l
> l
> 
alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$ perl -i -p -e 's/\n/\r\n/' winningStreak.txt
它改变了结尾,这样我的perl脚本就可以工作了


谢谢你的帮助

我猜当你说你“复制”了这个文件时,你实际上并没有复制它,但你做了别的事情。我还想猜测这是关于行尾的,并且其中任何一个文件都来自Windows。@TLP复制时,我高亮显示并粘贴到winningStreak.txt文档中。我不知道为什么马车返回会改变任何事情@ССаа27alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$hextdump-C a.txt winningStreak.txt 00000000 77 0d 0a 77 0d 0a 6c 0d 0a 6c 0d 0a 0a 77 0a | w | w | w | l | l | w | 1000000 77 0a 6c 0a 6c 0a | w.l | 00000017
perl-i-pe'y | r | d'a.txtwinningStreak.txt
将从文件中删除CR。@alex请注意hextump中的字符
0d
。这是
\r
,一个不可打印的空白字符。我猜当你说你“复制”了文件时,你实际上并没有复制它,但你做了其他事情。我还想猜测这是关于行尾的,并且其中任何一个文件都来自Windows。@TLP复制时,我高亮显示并粘贴到winningStreak.txt文档中。我不知道为什么马车返回会改变任何事情@ССаа27alexhuhn@Ubuntu-MacPro:~/Desktop/Analysis$hextdump-C a.txt winningStreak.txt 00000000 77 0d 0a 77 0d 0a 6c 0d 0a 6c 0d 0a 0a 77 0a | w | w | w | l | l | w | 1000000 77 0a 6c 0a 6c 0a | w.l | 00000017
perl-i-pe'y | r | d'a.txtwinningStreak.txt
将从文件中删除CR。@alex请注意hextump中的字符
0d
。这是
\r
,一个不可打印的空白字符。