仅当字段不为空时才打印

时间:2017-05-04 19:07:50

标签: bash awk grep

我有一个文本文件,我想只在第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在第四列中没有数据。

3 个答案:

答案 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验证需要附加条件)