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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM