【问题标题】:How to delete repeated rows if column 2 and column 3 matches using awk?如果第 2 列和第 3 列使用 awk 匹配,如何删除重复的行?
【发布时间】:2016-04-14 08:51:45
【问题描述】:

我有一个包含 4 列的文件:

ifile.txt
3  5  2  2
1  4  2  1
4  5  7  2 
5  5  7  1 
0  0  1  1

我想删除第 2 列和第 3 列相同的重复行。例如,第 3 行和第 4 行在第 2 列和第 3 列中具有相同的值。所以我想保留第 3 行并删除第 4 行。我的输出是:

ofile.txt
3  5  2  2
1  4  2  1
4  5  7  2
0  0  1  1

【问题讨论】:

    标签: awk


    【解决方案1】:
    awk 'NR==FNR{a[$2,$3]++;next}a[$2,$3]==1' file file
    3  5  2  2
    1  4  2  1
    0  0  1  1
    

    GNU awk

    【讨论】:

    • 非常好。也适用于常规(非 gawk)awk。
    • @A-Ray:非常感谢。但我很抱歉,我在寻找别的东西。即删除重复的。
    • 喜欢这个? awk '![a$2,$3]++' file
    【解决方案2】:
    awk '{a[NR]=$2""$3} a[NR]!=a[NR-1]{print}' file
    

    $2$3 值保存到数组a 中,索引为NR。如果当前行和上一行中a 的值与打印行不匹配,则忽略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 2016-11-14
      • 2015-11-04
      • 1970-01-01
      相关资源
      最近更新 更多