awk_合并两个、三个文件

ARCIND:可以匹配文件,==1匹配第一个文件。
awk中for循环可以取变量的所有元素出来。

思路:以“索引”作为合并依据,并且放到a这个变量内,a文件中有n个索引,变量a就有n个元素,,配合ARCIND,拿a[索引]去b文件中扩展数据。最后for循环把a变量的所有元素取出来。
注意:
也可以用NF=FNR加if去定位文件。但是两个文件可以,文件多了就不行了。
awk ‘{if(NR==FNR){a[$1]=$0;} else{a[$2]=a[$2]"\t"$1}} END{for(i in a){print a[i]}}’ a b

[root@master test]# cat a
1 a
2 b
3 c
4 d

[root@master test]# cat b
q 1
r 2
d 3
f 4

[root@master test]# awk  'ARGIND==1{a[$1]=$0}ARGIND==2{a[$2]=a[$2]"\t"$1} END{for(i in a){print a[i]}}' a b
4 d	f
1 a	q
2 b	r
3 c	d

三个文件:

[root@master test]# cat c
1 1
2 2
3 3
4 4
[root@master test]# awk  'ARGIND==1{a[$1]=$0}ARGIND==2{a[$2]=a[$2]"\t"$1}ARGIND==3{a[$1]=a[$2]"\t"$2} END{for(i in a){print a[i]}}' a b c
4 d	f	4
1 a	q	1
2 b	r	2
3 c	d	3

匹配到ARGIND=1:给变量a一个元素并且把a文件每一行赋值给对应的元素即a[1]=1 a a[2]=2 b其余的操作不进行。
匹配ARGIND=2:文件b中‘索引是$2’给a的元素添加值a[$2]=a[$2]"\t"$1 即a[1]=1 a q
以此类推。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值