Linux
在 Linux 中操作數據
我在 1 個文件中有數據
例子:
a1b1:online xxxx:offline wxyz:enable a2b2:online txtx:disable
對於單一數據,不是問題,但是線上的雙重資訊呢?
我如何顯示資訊
data a1b1 a2b2 are online --- how to get this data xxxx are offline -- no issue data wxyz are enable -- no issue
$ awk -F: 'a[$2] {a[$2] = a[$2]" "$1; next}; {a[$2]=$1}; END {for (s in a) { print "data " a[s] " are " s }}' input.txt data xxxx are offline data txtx are disable data a1b1 a2b2 are online data wxyz are enable
這使用一個關聯數組
a
(帶有狀態, $ 2, as the key) to store the hosts ( $ 1) 具有該狀態。如果給定狀態的數組元素已經存在,則附加一個空格和主機名。否則,只需使用該主機名創建該元素。(我假設它們是主機名 - 沒關係。程式碼適用於數據而不是定義)
讀取整個輸入文件後,它會以所需格式列印出數組。
請注意,因為 in
awk
中的關聯數組未按任何特定順序儲存,所以輸出是無序的。如果您需要對其進行排序,您可以在 awk 腳本中執行此操作,但將輸出通過管道傳輸到sort
.如果您只對
online
狀態感興趣,您可以將輸出通過管道傳輸到grep
,或者在 awk 腳本中執行。例如$ awk -F: '!/online/ {next}; a[$2] {a[$2] = a[$2]" "$1; next}; {a[$2]=$1}; END {for (s in a) { print "data " a[s] " are " s }}' input.txt data a1b1 a2b2 are online