【发布时间】:2018-06-05 00:13:34
【问题描述】:
我有一个文本文件,其模式如下所示
Sample1
Feature 1
A
B
C
Feature 2
A
G
H
L
Sample2
Feature 1
A
M
W
Feature 2
P
L
我正在尝试计算每个样本中每个功能的条目数。所以我想要的输出应该是这样的:
Sample1
Feature 1: 3
Feature 2: 4
Sample2
Feature 1: 3
Feature 2: 2
我尝试使用以下 awk 命令:
$ awk '{if(/^\Feature/){n=$0;}else{l[n]++}}
END{for(n in l){print n" : "l[n]}}' inputfile.txt > result.txt
但它给了我以下输出
Feature 1: 6
Feature 2: 6
所以我想知道是否有人可以帮助我修改此命令以获得所需的输出或为我建议另一个命令? (P.S 原始文件包含数百个样本和大约 94 个特征)
【问题讨论】:
-
为什么在
if(/^\Feature/)中的Feature之前加上反斜杠?顺便说一句,永远不要使用字母l作为变量名,因为它看起来太像数字1并且会混淆您的代码。 -
@EdMorton 我在 awk 命令方面没有太多经验,在之前的帖子中建议使用此命令。感谢您对字母“l”的说明,我将避免使用它。