【发布时间】:2017-10-10 11:31:31
【问题描述】:
我想使用 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 无法执行此步骤,我并不担心,因为我可以单独执行此步骤
希望这是有道理的
干杯 奥利
【问题讨论】:
-
请在您的帖子中也发布示例输出。
-
是的,也许这是一个不好的例子,因为我刚刚给出了两个大文件的头部并且两者之间没有任何匹配。但是,如果 file1 的第 1 行例如包含 TRINITY_DN100001_c0_g1_i1 和 TRINITY_DN100004_c0_g1_i1 我希望 file2 的第 6 列是 0.00 和 0.21
-
我已将原始评论更改为更有用的示例
-
抱歉 Ed,这次我放了一个示例输出。谢谢
-
好的,但是您发布了 2 个不同的可能输出。只需选择您想要的输出并发布即可。
标签: awk