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文件的第三列