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

Awk 如何在文本文件中搜索数组的每个元素?,awk,Awk,我有一个名为headers的数组。 echo${headers[@]}返回abcd。 我想从文本文件的第一行搜索这些元素,并返回它所在的列号 示例输入文件可能是这样的 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 我在那个数组的元素上做了一个循环,并试图把它输入一个

我有一个名为
headers
的数组。
echo${headers[@]}
返回
abcd
。 我想从文本文件的第一行搜索这些元素,并返回它所在的列号

示例输入文件可能是这样的

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
我在那个数组的元素上做了一个循环,并试图把它输入一个呆呆的窗口。但不知何故,它并没有在数组中搜索这些元素

这是我的片段

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
${headers[@]}中ii的

做
echo$ii
gawk-vtoken=“$ii”-F$'\t”
/$token/{#这是我尝试向标头数组的元素提供信息的行。

对于(f=1;f这就是你想要做的吗

$ 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
$cat tst.awk
NR==1{
拆分(标题、tmp)
对于(tmp中的i){
hdrs[tmp[i]]
}

对于${headers[@]}中的(i=1;i而不是
/“$token”/
您想要
$0~ token
用于ii)执行echo$ii gawk-vtoken=“$ii”-F$'\t'$0~ token{for(f=1;如果
echo$headers确实返回一个bcd
那么
headers
不是一个包含4个字符串“A”、“B”、“C”和“D”的数组,它是一个包含1个字符串“abcd”的标量或数组。或者,它是一个数组,但第一个元素是“abcd”我检查了这个,它是一个数组。我只是想调整我的代码。哈,我的想法几乎是一字不差的!不知道我该怎么想;-)。嗯,很高兴你比我想得快?或者你想知道“伟大的人想法相似,傻瓜很少不同”的范围吗?当然,让我们开始做第一件事吧…:-)。