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”我检查了这个,它是一个数组。我只是想调整我的代码。哈,我的想法几乎是一字不差的!不知道我该怎么想;-)。嗯,很高兴你比我想得快?或者你想知道“伟大的人想法相似,傻瓜很少不同”的范围吗?当然,让我们开始做第一件事吧…:-)。