gpt4 book ai didi

sorting - 使用awk删除包含唯一第一个字段的行?

转载 作者:行者123 更新时间:2023-12-05 00:04:57 26 4
gpt4 key购买 nike

希望仅打印具有重复第一个字段的行。例如从看起来像这样的数据:

1 abcd
1 efgh
2 ijkl
3 mnop
4 qrst
4 uvwx

应该打印出来:
1 abcd
1 efgh
4 qrst
4 uvwx

(仅供引用 - 我的数据中的第一个字段并不总是 1 个字符长)

最佳答案

awk 'FNR==NR{a[$1]++;next}(a[$1] > 1)' ./infile ./infile
是的,你给它两次输入相同的文件。由于您不知道当前记录是否为 uniq,因此您可以根据 $1 构建一个数组。在第一遍然后你只输出已经看到 $1 的记录第二遍不止一次。
我确定有办法只通过一次文件就可以做到这一点,但我怀疑它们会“干净”
解释
  • FNR==NR : 仅当 awk 时才如此正在读取第一个文件。它主要测试看到的记录总数 (NR) 与当前文件中的输入记录 (FNR)。
  • a[$1]++ : 建立关联数组 谁的键是第一个字段( $1 ),并且每次看到 who 的值都会增加一个。
  • next : 如果到达,则忽略脚本的其余部分,重新​​开始一个新的输入记录
  • (a[$1] > 1)这只会在 ./infile 的第二次通过时进行评估它只打印我们不止一次看到的第一个字段( $1 )的记录。本质上,它是 if(a[$1] > 1){print $0} 的简写

  • 概念证明
    $ cat ./infile
    1 abcd
    1 efgh
    2 ijkl
    3 mnop
    4 qrst
    4 uvwx

    $ awk 'FNR==NR{a[$1]++;next}(a[$1] > 1)' ./infile ./infile
    1 abcd
    1 efgh
    4 qrst
    4 uvwx

    关于sorting - 使用awk删除包含唯一第一个字段的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5123820/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com