我试图消除基于一个单独字段的一组重复行。cat file.txt
1 345 a blue
1 345 b blue
3 452 c blue
3 342 d green
3 342 e green
1 345 f green
我想删除基于字段1和2的重复行,但分别针对每种颜色。所需的输出:
1 345 a blue
3 452 c blue
3 342 d green
1 345 f green
我可以使用遍历颜色的
for loop
实现此输出:for i in $(awk '{ print $4 }' file.txt | sort -u); do
grep -w ${i} |
awk '!x[$1,$2]++' >> output.txt
done
但这很慢。有没有办法在不使用循环的情况下获取此输出?
谢谢。
最佳答案
至少对于示例来说,它很简单:
$ awk 'arr[$1,$2,$4]++{next} 1' file
1 345 a blue
3 452 c blue
3 342 d green
1 345 f green
或者,您可以否定:
$ awk '!arr[$1,$2,$4]++' file
您也可以对GNU排序使用相同的排序,这可能会更快:
$ sort -k4,4 -k2,2 -k1,1 -u file
关于arrays - 使用awk数组根据单独的字段消除重复的列?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42322026/