代码之家  ›  专栏  ›  技术社区  ›  geeb.24

使用Awk消除基于两列的重复行

  •  1
  • geeb.24  · 技术社区  · 6 年前

    鉴于此输入:

    #       133        15
    KBL  40.385  26.385 1.0000 S
    KBL  23.846   9.289 1.0000 P
    KBL  40.234  26.385 1.0000 S
    #       133         4
    KBL  40.234  28.566 1.0000 S
    KBL  40.385  28.566 1.0000 S
    KBL  23.846  12.032 1.0000 P
    

    #       133        15
    KBL  40.385  26.385 1.0000 S
    KBL  23.846   9.289 1.0000 P
    #       133         4
    KBL  40.234  28.566 1.0000 S
    KBL  23.846  12.032 1.0000 P
    

    我试过了 awk '!a[$0]++' file.xy . 但是,这只会删除完全相同的行。我只想删除在第二列或第三列中有重复值的行。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Ed Morton    6 年前

    # -行分隔块:

    $ awk '/^#/{print; delete seen; next} !(seen[$2]++ || seen[$3]++)' file
    #       133        15
    KBL  40.385  26.385 1.0000 S
    KBL  23.846   9.289 1.0000 P
    #       133         4
    KBL  40.234  28.566 1.0000 S
    KBL  23.846  12.032 1.0000 P
    
        2
  •  1
  •   Ashutosh    6 年前

    awk '!a[$2]++ || !a[$3]++' file1.txt > file2.txt && awk '!a[$3]++' file2.txt
    

    产生的结果是:

    #       133        15
    KBL  40.385  26.385 1.0000 S
    KBL  23.846   9.289 1.0000 P
    #       133         4
    KBL  40.234  28.566 1.0000 S
    KBL  23.846  12.032 1.0000 P