sed/awk+;正则表达式删除第一个字段匹配的重复行(ip地址)

sed/awk+;正则表达式删除第一个字段匹配的重复行(ip地址),awk,sed,ip,match,Awk,Sed,Ip,Match,我需要一个删除重复行的解决方案,其中第一个字段是IPv4地址。例如,我在文件中有以下行: 192.168.0.1/text1/text2 192.168.0.18/text03/text7 192.168.0.15/sometext/sometext 192.168.0.1/text100/ntext 192.168.0.23/othertext/sometext 因此,在前面的场景中,它只匹配IP地址。我只知道IP地址的正则表达式是: \b\d{1,3}\.\d{1,3}\.\d{1,3}\

我需要一个删除重复行的解决方案,其中第一个字段是IPv4地址。例如,我在文件中有以下行:

192.168.0.1/text1/text2
192.168.0.18/text03/text7
192.168.0.15/sometext/sometext
192.168.0.1/text100/ntext
192.168.0.23/othertext/sometext
因此,在前面的场景中,它只匹配IP地址。我只知道IP地址的正则表达式是:

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

这将是很好的,如果解决方案是一行,并尽可能快

如果文件仅包含符合您显示格式的行,即第一个字段始终是IP地址,则您可以使用一行awk:

awk '!x[$1]++' FS="/" $PATH_TO_FILE

编辑:仅基于IP地址删除重复项。我不确定这是OP在我写这个答案时想要的。

如果您不需要保留原始顺序,一种方法是使用
排序

sort -u <file>
sort-u

阿琼山卡发布的awk对我来说创造了奇迹

我有一个巨大的项目列表,在字段1中有多个副本,在字段2中有一个特殊的序列号。我需要每个唯一字段1中的“最新”或最高序列号

我必须使用sort-rn将它们推到“first entry”位置,因为第一步是写入,然后比较下一个条目,而不是获取列表中的最后一个/最近一个条目


谢谢阿诸山卡

+1表示保留原始顺序的最短解决方案。+1无论OP如何定义其“复制行”,此解决方案都可以轻松扩展以满足其需求。经典!删除重复项的[$n]++用法。该解决方案是完美的!正是我需要的!谢谢你的回复。读者,“副本”对你来说意味着什么?i、 e.由于您特别提到了匹配IP地址,我觉得您只希望每个IP地址保留一行。这是正确的吗?如果没有,那么就像@jcollado提到的,您应该只使用sort。@ArjunShankar我想他可能想删除重复的行,只要$1是ip地址。因此,如果有两个(+)行,如“abcdefg”,它们将不会被删除。但这只是我的猜测。@Kent:你可能是对的。我们的混淆主要是因为示例中的所有行都是IP地址,并且除了匹配的IP之外,没有真正的重复项。