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文件的第三列
发布于:2019-10-28 00:21:05