将两个文档逐行链接,好比:
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字符串