排序 – 使用awk删除包含唯一第一个字段的行?
发布时间:2020-12-13 23:49:33 所属栏目:Linux 来源:网络整理
导读:希望仅打印具有重复的第一个字段的行.例如从看起来像这样的数据: 1 abcd1 efgh2 ijkl3 mnop4 qrst4 uvwx 应打印出来: 1 abcd1 efgh4 qrst4 uvwx (仅供参考 – 我的数据中第一个字段的长度不总是1个字符) 解决方法 awk 'FNR==NR{a[$1]++;next}(a[$1] 1)' ./
希望仅打印具有重复的第一个字段的行.例如从看起来像这样的数据:
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)中的输入记录. 概念证明 $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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |