我想比较两个文件的值,但不是基于位置或顺序

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)


Hau*_*ing 5

首先对文件进行排序(在 中bash):

diff <(sort file1) <(sort file2)
Run Code Online (Sandbox Code Playgroud)