我正在尝试根据单独的字段消除一组重复的行。
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
但这很慢。有没有办法在不使用循环的情况下获得此输出?
谢谢。
答案 0 :(得分:4)
至少在这个例子中,它很简单:
$ 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
答案 1 :(得分:4)
你能不能试试这个:
awk '!a[$1,$2,$4]++' Input_file