【发布时间】:2017-10-22 17:33:40
【问题描述】:
我有一个带有标题的 4 列文件 (input.file):
something1 something2 A B
后跟许多具有相同格式的 4 列行(例如):
ID_00001 1 0 0
ID_00002 0 1 0
ID_00003 1 0 0
ID_00004 0 0 1
ID_00005 0 1 0
ID_00006 0 1 0
ID_00007 0 0 0
ID_00008 1 0 0
其中“1 0 0”代表“AA”,“0 1 0”代表“AB”,“0 0 1”代表“BB”
首先,我想创建第 5 列来识别这些表示:
ID_00001 1 0 0 AA
ID_00002 0 1 0 AB
ID_00003 1 0 0 AA
ID_00004 0 0 1 BB
ID_00005 0 1 0 AB
ID_00006 0 1 0 AB
ID_00007 0 0 0 no data
ID_00008 1 0 0 AA
请注意,需要从标题行的第 3 列和第 4 列解析 A 和 B,因为它们并不总是 A 和 B。
接下来,我想对(新的)第 5 列的计数进行“数学运算”,如下所示:
(2BB + AB) / 2(AA + AB + BB)
使用这个例子,数学会给出:
(2(1) + 3) / 2(3 + 3 + 1) = 5/14 = 0.357
我想将其附加到所需输出文件(output.file)的末尾:
ID_00001 1 0 0 AA
ID_00002 0 1 0 AB
ID_00003 1 0 0 AA
ID_00004 0 0 1 BB
ID_00005 0 1 0 AB
ID_00006 0 1 0 AB
ID_00007 0 0 0 no data
ID_00008 1 0 0 AA
B_freq = 0.357
到目前为止,我有这个:
awk '{ if ($2 = 1) {print $0, $5="AA"} \
else if($3 = 1) {print $0, $5="AB"} \
else if($4 = 1) {print $0, $5="BB"} \
else {print$0, $5="no data"}}' input.file > output.file
显然,我无法弄清楚如何解析第 1 行(标题行,已删除“第 1 列”)中的信息,更不用说数学了。
谢谢大家!
【问题讨论】:
-
...how to parse the info from column 1...?? -
表示第 1 行(标题行),对此感到抱歉
-
更具体地说,我无法(例如)解析标题行第 3 列中的“A”并将其(两次)放在后续“1 0 0”行的第 5 列中。
-
现在我明白了,看看我更新的答案。