awk将两个文件逐行连接
利用 awk 关联数组按首字段匹配并连接两个文件中的对应记录。
将两个文档逐行连接,比如: a文件内容是 a 1 b 2 c 3
b文件内容是 a 5 b 6
结果是 a 1 5 b 2 6 c 3
awk代码为:
awk '{a[$1]=a[$1]" "$2}END{for (j in a) print j""a[j]}' a b说实话,这行代码相当难以理解。看完了awk的语法,也没有发现类似的用法。使用谷歌找到了一个解释。
{ 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)
意思是a数组以$1为key,a[$1]的初值是空字符串,将同一个key对应的" "$2不断追加到a[$1]中。
比如:
awk '{a[$1]=a[$1]" "$2}END{for (j in a) print a[j]}' a b上面代码的结果是(间隔为两个空格):
1 5 2 6 3还有一种方法
paste -d' ' a b | awk '{print $1, $2, $4}'但这种写法没有第一种好,第一种写法可以保证b文件的第一列顺序与a不同时仍然可以实现拼接。比如,当b文件内容下面这种时,结果是一样的 b 6 a 5