Linux 删除两列中有重复值的行
我有一个有四列的文件Linux 删除两列中有重复值的行,linux,awk,sed,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 '!x[$2,$3]++' FS="," 我的这个awk脚本工作正常,但没有像这样删
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 '!x[$2,$3]++' FS=","
我的这个awk脚本工作正常,但没有像这样删除重复的行
3022751,6656,7656,T029957
3022751,6054,7054,T029957
awk '!x[$2,$3]++' FS=","
电流输出为
3022751,6656,7656,T029957
3022751,6054,7054,T029957
3022751,10400,10400,T029958
谢谢
awk -F, '$2!=$3' file
阅读Arnold Robbins的《有效的Awk编程》,第四版。withgrep
$ 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
!x[$2,$3]+
将删除$2==$3的行?您的意思是删除字段2和字段3相等的行,还是删除另一行第2列中具有相同值的所有行(第3列中具有相同值)???在你暴露的情况下,这两条规则都适用;欢迎光临。请注意,如果第四列的性质发生变化,这可能会删除比预期更多的行。@potong,true-我的回答完全针对给定的输入和所需的处理。。。您可以相应地调整正则表达式,或者在其他情况下使用-P
选项进行前向/后向构造awk/perl
在一般情况下会更好。@potong在进一步分析后发现,我以前的正则表达式会删除第3列和第4列相同的行。。因此,现在修改为仅限于第2列和第3列匹配。。谢谢:)