我有一个包含几千行和 20 多列的文件。我现在只想保留第 3 列中与其他行具有相同电子邮件地址的行。
文件:(名字;姓氏;电子邮件;...)
Mike;Tyson;mike@tyson.com
Tom;Boyden;tom@boyden.com
Tom;Cruise;mike@tyson.com
Mike;Myers;mike@tyson.com
Jennifer;Lopez;jennifer@lopez.com
Andre;Agassi;tom@boyden.com
Paul;Walker;paul@walker.com
我想保留所有具有匹配电子邮件地址的行。在这种情况下,预期的输出将是Mike;Tyson;mike@tyson.com
Tom;Boyden;tom@boyden.com
Tom;Cruise;mike@tyson.com
Mike;Myers;mike@tyson.com
Andre;Agassi;tom@boyden.com
如果我使用awk -F';' '!seen[$3]++' file
我将丢失电子邮件地址的第一个实例,在本例中为第 1 行和第 2 行,并且仅保留重复项。有没有办法保留所有行?
最佳答案
这个 awk one-liner 将帮助您:
awk -F';' 'NR==FNR{a[$3]++;next}a[$3]>1' file file
它两次传递文件,第一次计算出现次数,第二次将检查并输出。使用给定的输入示例,它打印:
Mike;Tyson;mike@tyson.com
Tom;Boyden;tom@boyden.com
Tom;Cruise;mike@tyson.com
Mike;Myers;mike@tyson.com
Andre;Agassi;tom@boyden.com
关于Bash:在 X 列中保留所有具有重复值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63992814/