ans*_*nha 5 shell bash diff file-comparison
假设我有两个文件,内容如下:
$ cat File1.txt
Apple
orange
watermelon
avocado
lime
Run Code Online (Sandbox Code Playgroud)
$ cat File2.txt
orange
Apple
lime
watermelon
avocado
Run Code Online (Sandbox Code Playgroud)
基本上没有区别,因为两者具有相同的值。我正在使用diff命令:
diff File1.txt File2.txt
Run Code Online (Sandbox Code Playgroud)
它显示文件不同,因为值放错了位置,在我的情况下,我要求它不应该显示差异。还有什么其他方法可以实现这一目标,欢迎提出任何建议。
Gil*_*il' 14
比较排序后的文件。
在 bash(或 ksh 或 zsh)中,使用进程替换:
diff <(sort File1.txt) <(sort File2.txt)
Run Code Online (Sandbox Code Playgroud)
在普通的 sh 中:
sort File1.txt >File1.txt.sorted
sort File1.txt >File2.txt.sorted
diff File1.txt.sorted File2.txt.sorted
Run Code Online (Sandbox Code Playgroud)
要快速查看已排序文件之间的差异,comm这很有用:它直接显示一个文件中的行而不是另一个文件中的行。
comm -12 <(sort File1.txt) <(sort File2.txt) >common-lines.txt
comm -23 <(sort File1.txt) <(sort File2.txt) >only-in-file-1.txt
comm -13 <(sort File1.txt) <(sort File2.txt) >only-in-file-2.txt
Run Code Online (Sandbox Code Playgroud)
如果在同一个文件中重复一行,上面的命令坚持两个文件具有相同的重复次数。如果你想治疗
foo
bar
foo
Run Code Online (Sandbox Code Playgroud)
等同于
bar
foo
Run Code Online (Sandbox Code Playgroud)
然后在排序时删除重复项:使用sort -u而不是sort.
如果您将输出保存sort在一个文件中并稍后在另一个文件可用时使用它,请注意这两个文件必须在相同的语言环境中排序。如果你这样做,你可能应该按字节顺序排序:
LC_ALL=C sort File1.txt >File1.txt.sorted
Run Code Online (Sandbox Code Playgroud)