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 脚本可以工作。
感谢大家的帮助!
我有一个 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 脚本可以工作。
感谢大家的帮助!