2017-05-04 80 views
-1

我有,我想拉主機和IP信息僅如果IP存在於第4欄。例如文本文件:打印僅當字段不爲空

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在第四列中沒有數據。

+1

請將您希望的輸出樣本輸入添加到您的問題中。 – Cyrus

回答

0
awk '{if ($4) print $0;}' < hostlist.txt 

有竅門。它在功能上等同於早期的解決方案,但更簡單,因爲您只檢查是否存在而不匹配正則表達式。

+0

這工作,是一個更乾淨的解決方案。謝謝。 – teamg

+3

由於'awk'命令形成爲'condition {actions}',並且由於默認操作是打印,所以這可以被壓縮爲'awk'$ 4'hostlist.txt' :) – ilkkachu

+0

這是真的,問題是措辭。我給出了條件表單,因爲它給了更多的靈活性(例如,如果你不想打印整行) –

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驗證需要額外的條件)

0

如果可以用線,其中字段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