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
以此类推。

你可能感兴趣的:(笔记)