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

还有一种方法

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

但这种写法没有第一种好,第一种写法可以保证b文件的第一列顺序与a不同时仍然可以实现拼接。比如,当b文件内容下面这种时,结果是一样的
b 6
a 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值