【发布时间】:2014-12-12 08:16:45
【问题描述】:
我有两个如下所示的以制表符分隔的文件:
文件 A
chr1 123 aa b c d
chr1 234 a b c d
chr1 345 aa b c d
chr1 456 a b c d
....
文件B
chr1 123 aa c d e ff
chr1 345 aa e f g gg
chr1 123 aa c d e hh
chr1 567 aa z c a ii
chr1 345 bb x q r kk
chr1 789 df f g s ff
chr1 345 sh d t g ll
...
我想根据 2 个关键列“chr1”、“123”,即(前两列是关键列),从文件 B 向文件 A 添加一个新列。如果两个文件中的键列都匹配,则应将文件 B 中第 7 列的数据添加到文件 A 中的第 3 列。
例如 (chr1 123) 键在文件 B 中出现两次,因此文件 A 中的第 3 列的 ff 和 hh 用逗号分隔。如果未找到密钥,则应输入 NA,输出应如下所示: 输出:
chr1 123 ff,hh aa b c d
chr1 234 NA a b c d
chr1 345 gg,kk,ll aa b c d
chr1 456 NA a b c d
我使用 awk 解决方案实现了这一点
awk -F'\t' -v OFS='\t' 'NR==FNR{a[$1FS$2]=a[$1FS$2]?a[$1FS$2]","$7:$7;next}{$3=(($1FS$2 in a)?a[$1FS$2]:"NA")FS $3}1' fileB fileA
现在,我想在第 7 列中添加另一个第 6 列。有人可以建议如何执行此操作吗? 输出如下:
chr1 123 ff,hh e,e aa b c d
chr1 234 NA NA a b c d
chr1 345 gg,kk,ll g,r,g aa b c d
chr1 456 NA NA a b c d
谢谢
【问题讨论】:
标签: awk