我有一个文本文件,我想只在第4列中存在IP时才提取主机和IP信息。例如:
cat hostlist.txt
Server One 255.255.255.255 123.123.123.123
Server Two 255.255.255.255
Server Three 255.255.255.255 123.123.123.123
在这种情况下,我只想看到Server One和Three,因为Server Two在第四列中没有数据。
答案 0 :(得分:4)
awk '{if ($4) print $0;}' < hostlist.txt
诀窍。它在功能上等同于早期的解决方案,但更简单,因为您只检查存在而不是匹配正则表达式。
答案 1 :(得分:1)
如果您可以使用字段4中没有打印值0
的行,则可以简化为
$ awk '$4' hostlists.txt
Server One 255.255.255.255 123.123.123.123
Server Three 255.255.255.255 123.123.123.123
这在功能上等同于{if ($4) print $0;}
,但仅限于一种模式,并使用print $0
的默认操作。
答案 2 :(得分:0)
awk 方法:
awk 'NF>=4 && $4~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/' hostlist.txt
输出:
Server One 255.255.255.255 123.123.123.123
Server Three 255.255.255.255 123.123.123.123
NF>=4
- 确保记录至少包含4个字段
$4~/^([0-9]{1,3}\.){3}[0-9]{1,3}$/
- 确保第4个字段包含IPv4地址(最简单的形式。真正的IPv4验证需要附加条件)