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)
但它给出了绝对差异。
您可以使用这个 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)
另一个极简主义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 不应该出现!
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |