linux 如何从文件中获取唯一ip地址

4bbkushb  于 2022-12-22  发布在  Linux
关注(0)|答案(2)|浏览(189)

我有一个文本文件,其中包含一些细节。我想grep的唯一ip地址和打印所有的元组,该匹配的ip地址。
输入文本文件包含以下详细信息:

Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.45.67.890:56789 [111.111.111.111:12345] ->  117.140.11.11:123 (TCP)
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.45.67.890:12345 [111.111.111.111:12345] ->  110.140.11.11:123 (TCP)
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.45.67.890:56789 [111.111.111.111:12345] ->  117.140.11.11:123 (TCP)
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.75.88.860:98765 [111.111.111.111:12345] ->  117.140.79.118:123(UDP)
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.75.88.860:98765 [111.111.111.111:12345] ->  117.140.79.118:123(UDP)

我需要的输出:

Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.45.67.890:12345 [111.111.111.111:12345] ->  110.140.11.11:123 (TCP)
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.75.88.860:98765 [111.111.111.111:12345] ->  117.140.79.118:123(UDP)

我需要整行,IP必须唯一
我不关心其他列,我只希望所有行的ip地址必须是唯一的。此位置ip在所有输出行中必须是唯一的123.75.88.860:98765 [111.111.111.111:12345] -〉117.140.79.118:123(UDP)

j91ykkif

j91ykkif1#

一个简单的,检查一下第17列:

$ awk -F' |:' '!a[$17]++' yourFile                      
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.45.67.890:56789 [111.111.111.111:12345] ->  117.140.11.11:123 (TCP)
Jan 11 11:11:11 2020-12-01 11: 11:11: {ABC-ABCDE-AB-123}ABCDEFGHI_ABCDEFG_ABCD: application:none, ab0.567 123.75.88.860:98765 [111.111.111.111:12345] ->  117.140.79.118:123(UDP)
blmhpbnm

blmhpbnm2#

我仍然不确定我是否完全理解了您的问题陈述,但我认为您所问的问题不能仅用grep工具来完成。
也许这个perl命令可以满足您的需要?(假设输入文件名为input

perl -ne 'BEGIN { my %seen } if (/(\d+\.\d+\.\d+\.\d+)/ && ! $seen{$1}) { $seen{$1} = 1 ; print "$_" }' input

这将输出第一个IP字段中包含每个唯一IP地址(忽略端口号)的第一行。它的工作原理是对该行中看起来像IP地址的第一个子字符串进行模式匹配,并查询名为seen的散列以确定这是否是提供该IP地址的第一行。如果是,则输出该行。
如果这仍然不是你所需要的,请尝试进一步澄清这个问题。

相关问题