我有一个类似于以下的列表:
192.168.2.1 sometext.com
192.168.2.1
192.168.2.3
192.156.1.6
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3
192.564.7.3 hello.com
我需要的输出:
192.168.2.1 sometext.com
192.168.2.3
192.156.1.6 moretext.com
192.123.1.1
192.564.7.3 hello.com
我只想删除没有主机名的 IP,前提是它们已经有一行包含主机名。
参见上面的例子。
这可能吗?
这是
awk
解决方案(我假设输出顺序无关紧要)。在这里,我们定义了一个关联的数组,命名为
seen
and$1
作为它的键索引;所以我们正在检查数组中不存在 IP 的第一列的键,!seen[$1]
然后将整行添加$0
到该键的值并读取next
行;否则(之前已经看到 IP 并且存在于数组中)如果下一行具有相同的 IP 并且具有主机名,则使用当前行值更新该键的值。在 END 处,我们循环遍历数组,将变量
x
视为对数组索引的引用,并打印这些键的值。