我想使用awk在表的第一列中搜索特定单词并在第6列中打印该值。我理解如何使用以下内容搜索一个单词:
awk '$1 == "<insert-word>" { print $6 }' file.txt
但是我想知道是否可以将它循环到连续的单词列表中?
例如,如果我有一个像下面的file1.txt这样的表:
cat file1.txt
dna1 dna4 dna5
dna3 dna6 dna2
dna7 dna8 dna9
我可以遍历第1行中的每个值并在下面的file2.txt的第1列中搜索这个单词,每次打印第6列的值吗?然后对第2,3行进行此操作......等等。
cat file2
dna1 0 229 7 0 4 0 0
dna2 0 296 39 2 1 3 100
dna3 0 255 15 0 6 0 0
dna4 0 209 3 0 0 0 0
dna5 0 253 14 2 3 7 100
dna6 0 897 629 7 8 1 100
dna7 0 214 4 0 9 0 0
dna8 0 255 15 0 2 0 0
dna9 0 606 338 8 3 1 100
因此,在文件1的第1行上循环awk的示例将返回数字4,0和3。
在第2行循环执行命令会返回数字6,8和1
最后循环第3行将返回数字9,2,3
示例输出可能是
4 0 3
6 8 1
9 2 3
我真正想要的是将每行返回的数字的总和相加。我只是不确定这是否可能......
此示例的输出将是
7
15
14
但我不担心这个步骤是否可以使用awk,因为我可以单独执行此操作
希望这是有道理的
干杯 奥利
答案 0 :(得分:2)
awk 'NR==FNR{a[$1]=a[$2]=1;next}a[$1]{print $6}' file1 file2
我没有测试上面的单线,但应该去。至少你明白了。
如果您不知道文件1中有多少列,正如您所说,您想要循环:
awk 'NR==FNR{for(x=1;x<=NF;x++)a[$x]=1;next}a[$1]{print $6}' file1 file2
编辑新要求:
awk 'NR==FNR{a[$1]=$6;next}{for(i=1;i<=NF;i++)s+=a[$i];print s;s=0}' f2 f1
以上单行的输出:(以f1和f2作为输入示例file1 file2):
7
15
14