Linux

在 Linux 中操作數據

  • August 1, 2019

我在 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) 具有該狀態。如果給定狀態的數組元素已經存在,則附加一個空格和主機名。否則,只需使用該主機名創建該元素。

(我假設它們是主機名 - 沒關係。程式碼適用於數據而不是定義)

讀取整個輸入文件後,它會以所需格式列印出數組。

請注意,因為 inawk中的關聯數組未按任何特定順序儲存,所以輸出是無序的。如果您需要對其進行排序,您可以在 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

引用自:https://unix.stackexchange.com/questions/533249