如何在文本文件中搜索数组的每个元素?

时间:2019-07-18 14:06:29

标签: awk

我有一个名为headers的数组。 echo ${headers[@]}返回A B C D。 我想从文本文件的第一行中搜索每个元素,并返回其所在的列号。

示例输入文件可能是这样

T   A  Z   R   B  E   C  D
10  1  5   0   5  88  0  8
20  8  2   10  2  10  1  45
30  2  33  11  8  25  2  40 
40  7  0   1   1  87  3  96

我在该数组的元素上进行了循环,并尝试将其输入到gawk中。但是不知何故,它不是在数组中搜索那些元素。

这是我的摘录

for ii in ${headers[@]}
do
   echo $ii

  gawk -vtoken="$ii" -F  $'\t' '                                 
     /$token/{                     # This is the line where I tried to feed the element of the header array.                                
        for(f=1;f<=NF;f++){                        
           hdr=$f                                  
          colhdr[f]=hdr                            
          if(index(hdr,"$token"))wanted[f]=1
        }
     } ' inputfile.txt


done

1 个答案:

答案 0 :(得分:1)

这是您要做什么吗?

$ cat tst.awk
NR==1 {
    split(headers,tmp)
    for (i in tmp) {
        hdrs[tmp[i]]
    }
    for (i=1; i<=NF; i++) {
        if ($i in hdrs) {
            print $i "=" i
        }
    }
    exit
}

$ headers=(A B C D)

$ awk -v headers="${headers[*]}" -f tst.awk file
A=2
B=5
C=7
D=8