删除行在两列中具有重复值

时间:2016-09-27 02:17:10

标签: linux awk sed

我有一个包含四列的文件

3022751,6656,7656,T029957
3022751,6054,7054,T029957
3022751,10400,10400,T029958
3022751,10400,10400,T029958

我想删除第2列和第3列中有重复的行。所以我的预期输出是这样的

3022751,6656,7656,T029957
3022751,6054,7054,T029957

我的这个awk脚本运行正常,但没有像这样删除重复的行

awk '!x[$2,$3]++' FS=","

当前输出

3022751,6656,7656,T029957
3022751,6054,7054,T029957
3022751,10400,10400,T029958

感谢。

2 个答案:

答案 0 :(得分:2)

awk -F, '$2!=$3' file

阅读Arnold Robbins撰写的有效Awk编程,第4版。

答案 1 :(得分:1)

$ cat ip.txt 3022751,6656,7656,T029957 3022751,6054,7054,T029957 3022751,10400,10400,T029958 3022751,10400,10400,T029958 $ grep -vE '^[^,]+,([^,]+),\1' ip.txt 3022751,6656,7656,T029957 3022751,6054,7054,T029957

^[^,]+,
  • ,第一栏和([^,]+)
  • \1抓住第二栏
  • -v反向引用捕获的组
  • 所以,如果发生这样的匹配,请不要打印该行,礼貌{{1}}选项