可以取消設置記錄分隔符在每個塊分別讀取,這樣的:
$ cat file
1. result = 1.2.3.4 (1.2.3.4)
info: [Affected]
2. result = www.addr.com (2.3.4.5)
info: [not Affected]
$ awk -F'[]=():[:space:][]+' -v RS= '{print $3, $4, $6 (NF==8?" " $7:"")}' file
1.2.3.4 1.2.3.4 Affected
www.addr.com 2.3.4.5 not Affected
在端三元處理字段(7或8的兩個不同的號碼,這取決於「受影響的」或「不受影響」)。如果有8個字段,則第7個字段會在空格後打印,否則,不會打印任何內容。
實現更整齊的格式化輸出,你可以使用printf
代替print
:
$ awk -F'[]=():[:space:][]+' -v RS= '{printf "%-12s%10s %s%s%s", $3, $4, $6, (NF==8?" " $7:""), ORS}' file
1.2.3.4 1.2.3.4 Affected
www.addr.com 2.3.4.5 not Affected
的格式說明規定每個字段的寬度。 A -
會導致內容左對齊。 ORS
是輸出記錄分隔符,默認情況下在您的平臺上是換行符。
就列對齊而言,這取決於您是在尋找人機還是機器可讀的東西。如果您希望將這些數據導入到電子表格中,也許可以使用製表符\t
(例如)將每列分開,這可以通過將-v OFS='\t'
添加到我的答案的第一個版本中完成。
得到以下異常:AWK:無效-v選項,而沒有 「V」 它工作正常,但忽略了最低顯示第三列 – Loretta
@Loretta你在使用GNU awk嗎?試試'-v RS =「\ n \ n」'。 – 123
聽起來像你可能沒有GNU awk。如果你不需要在'-v'和'RS'之間有一個空格。 –