awk將兩個文件逐行鏈接

將兩個文檔逐行鏈接,好比:
a文件內容是
a 1
b 2
c 3html

b文件內容是
a 5
b 6shell

結果是
a 1 5
b 2 6
c 3數組

awk代碼爲:app

awk '{a[$1]=a[$1]" "$2}END{for (j in a) print j""a[j]}' a b

說實話,這行代碼至關難以理解。看完了awk的語法,也沒有發現相似的用法。使用谷歌找到了一個解釋unix

{ a[$1]=a[$1]" " $2; next } means append the value of field two ($2) to an array (a) indexed by the value of field one ($1)code

意思是a數組以$1爲key,a[$1]的初值是空字符串,將同一個key對應的" "$2不斷追加到a[$1]中。
好比:htm

awk '{a[$1]=a[$1]"  "$2}END{for (j in a) print a[j]}' a b

上面代碼的結果是(間隔爲兩個空格):ip

1  5
  2  6
  3

還有一種方法文檔

shellpaste -d' ' a b | awk '{print $1, $2, $4}'

但這種寫法沒有第一種好,第一種寫法能夠保證b文件的第一列順序與a不一樣時仍然能夠實現拼接。好比,當b文件內容下面這種時,結果是同樣的
b 6
a 5字符串

相關文章
相關標籤/搜索