awk的二维数组

awk二维数组练习

  • 现有f1,f2两个文档
$cat f2
	5	6	7	8	9	10
A	0.7	0.8	0.9	1	1.1	1.2
C	0.22	0.34	0.46	0.58	0.7	0.82
D	-0.26	-0.12	0.02	0.16	0.3	0.44
E	-0.74	-0.58	-0.42	-0.26	-0.1	0.06
F	-1.22	-1.04	-0.86	-0.68	-0.5	-0.32
G	-1.7	-1.5	-1.3	-1.1	-0.9	-0.7
H	-2.18	-1.96	-1.74	-1.52	-1.3	-1.08
I	-2.66	-2.42	-2.18	-1.94	-1.7	-1.46
K	-3.14	-2.88	-2.62	-2.36	-2.1	-1.84
L	-3.62	-3.34	-3.06	-2.78	-2.5	-2.22
M	-4.1	-3.8	-3.5	-3.2	-2.9	-2.6
$cat f1
5	A
8	C
10	G
11	D
12	F
13	H

需求:

根据f2文件的第一行第一列为序号,求出f1中各对应的结果,打印在第三列

[root@Web awk]# awk 'FNR==NR{for(i=0;i++<NF;){if(NR==1)a[i+1]=$i;if(NR>1)b[a[i],$1]=$i};next}{print $0,b[$1,$2]}'  f2  f1
5	A 0.7
8	C 0.58
10	G -0.7
11	D 
12	F 
13	H 
思路
awk 'FNR==NR{for(i=0;i++<NF;){if(NR==1)a[i+1]=$i;if(NR>1)b[a[i],$1]=$i};next}{print $0,b[$1,$2]}'  f2  f1
对每一行进行循环,对第一行进行对应数组处理
a[1]=$0,a[2]=5,a[3]=6,a[4]=7,a[5]=8,a[6]=9,a[7]=10
然后下次循环跳过第一列

b[a[1],$1]=$1,b[a[2],$1]=$2,b[a[3],$1]=$3,b[a[4],$1]=$4,b[a[5],$1]=$5,b[a[6],$1]=$6,b[a[7],$1]=$7

这样就形成了我们需要的二维数组
然后循环整个f2文件
最后对f1文件获取,将结果打印在f1文件的第三列
posted @ 2018-01-31 23:04  陈浩然201  阅读(1864)  评论(0编辑  收藏  举报