仅删除两个文件之间精确数量的重复匹配

Kat*_*e S 7 bash awk grep compare duplicates

我想获得具有冗余条目的两个文件之间的剩余差异。

文件1.txt:

Data1
Data1
Data2
Data2
Data3
Data3
Data3
Data3
Data4
Data5
Data6
Data6
Run Code Online (Sandbox Code Playgroud)

文件2.txt:

Data1
Data2
Data2
Data3
Data3
Data4
Data5
Data6
Run Code Online (Sandbox Code Playgroud)

最终文件.txt:

Data1
Data3
Data3
Data6
Run Code Online (Sandbox Code Playgroud)

换句话说:如果某个条目在文件 1 中出现 n 次,在文件 2 中出现 m 次,则最终文件应包含 nm 个条目。即:看到 File1.txt 中有四个Data3条目,而 File2.txt 中只有两个条目,因此 Finalfile.txt 出现了 2 次Data3

我试过了:

grep -v -f File1.txt File2.txt > Finalfile.txt
Run Code Online (Sandbox Code Playgroud)

但它给出了绝对差异。

anu*_*ava 8

您可以使用这个 2 遍awk解决方案:

awk '
NR == FNR {
   ++fq[$1]
   next
}
{
   --fq[$1]
}
END {
   for (s in fq)
      for (i = 1; i <= fq[s]; ++i)
         print s
}' file1 file2

Data1
Data3
Data3
Data6
Run Code Online (Sandbox Code Playgroud)


kar*_*kfa 5

另一个极简主义awk

算法是多重集差:file1 \ file2。不需要排序。

$ awk 'NR==FNR{a[$1]++; next} --a[$1]<0' file2 file1

Data1
Data3
Data3
Data6
Run Code Online (Sandbox Code Playgroud)

请注意,在您想要的输出中,Data4 不应该出现!