0

以下に示すように、タブ区切りの 2 つのファイルがあります。

ファイル 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に新しい列を追加したい(最初の2列はキー列です)。キー列が両方のファイルで一致する場合、ファイル B の列 7 のデータをファイル A の列 3 に追加する必要があります。

たとえば、(chr1 123) キーはファイル B で 2 回検出されるため、ファイル 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 ソリューションを提供できますか?

4

1 に答える 1

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
于 2013-10-08T09:57:26.123 に答える