我有两个文件,如下所示,以制表符分隔:
档案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
我通常在R中这样做但是大型数据集需要花费大量时间。有人可以提供awk解决方案来加速任务吗?
答案 0 :(得分:1)
尝试这个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}7' fileB fileA