美文网首页
【awk】使用awk根据指定列去重

【awk】使用awk根据指定列去重

作者: Bogon | 来源:发表于2024-08-08 09:02 被阅读0次

    file.txt中内容示例如下,文本中内容每行用英文逗号 "," 作为分隔符,如何根据第一列去重?

    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50b8
    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50af
    

    你可以使用 awk 命令来根据第一列去重,并将结果保存到一个新的文件中。

    以下是一个简单的 awk 命令来实现这个需求:

    awk -F',' '!seen[$1]++' file.txt >   output.txt
    

    这个命令的解释如下:

    • -F',':指定字段分隔符为逗号。
    • !seen[$1]++seen 是一个关联数组,用于记录已经出现过的第一列值。如果该值第一次出现,!seen[$1]++ 为真(即 !0),然后将这一行输出。
    • file.txt:输入文件名。
    • > output.txt:将去重后的结果输出到 output.txt 文件中。

    这样,你就能得到一个按第一列去重后的结果文件 output.txt

    file.txt中内容示例如下,文本中内容每行用英文逗号 "," 作为分隔符,需要筛选出同样行内容出现2次的?

    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50b8
    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50af
    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50b8
    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c12358
    625784a12588e58d111c1f72c,6251e2b4d08ef5357a6c50b8
    625784a8d134758d111c1f72c,6251e2b4d08ef5357a6c50af
    
    cat  file.txt   | sort | uniq   -c | awk '{if($1==2) print $2}' 
    
    $ cat  file.txt   | sort | uniq   -c
          1 625784a12588e58d111c1f72c,6251e2b4d08ef5357a6c50b8
          1 625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c12358
          1 625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50af
          2 625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50b8
          1 625784a8d134758d111c1f72c,6251e2b4d08ef5357a6c50af
    
    $ cat  file.txt   | sort | uniq   -c | awk '{if($1==2) print $2}'
    625784a8d08e58d111c1f72c,6251e2b4d08ef5357a6c50b8
    
    echo  "AA,BB,CC,DD"  |  awk -F ","  '{ for(i=1;i<=NF;i++)   {print $i} }'  
    

    相关文章

      网友评论

          本文标题:【awk】使用awk根据指定列去重

          本文链接:https://www.haomeiwen.com/subject/khbckjtx.html