zoukankan      html  css  js  c++  java
  • 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文件的第三列
    
  • 相关阅读:
    #define用法详解
    memchr函数
    aiohttp模块1 client
    asyncio标准库7 Producer/consumer
    asyncio标准库6 Threads & Subprocess
    asyncio标准库5 TCP echo client and server
    asyncio标准库4 asyncio performance
    asyncio标准库3 HTTP client example
    asyncio标准库2 Hello Clock
    asyncio标准库1 Hello World
  • 原文地址:https://www.cnblogs.com/irockcode/p/8395290.html
Copyright © 2011-2022 走看看