フィールドを共有する別のファイルの対応する文字列をあるファイルに追加するにはどうすればよいですか?

フィールドを共有する別のファイルの対応する文字列をあるファイルに追加するにはどうすればよいですか?

「腫瘍ID」フィールドを持つ2つのファイルがあります。両方ともコンマで区切られます。ファイル2の一意のフィールドをファイル1に追加する必要があり、「腫瘍ID」の対応する文字列に基づいてそのフィールドの行を追加したいと思います。例の形式は次のとおりです。

ファイル1

Tumor_ID, Chromosome, start, end,
xxxxx,       2,        12,    13,
xxxxx,       3,        45,    46,
xxxxx,       3,        48,    49
xxxxx,       3,        51,    52,
nnnnn,       5,       55,    59,
nnnnn,       5,       57,    58,
lllll,      11,       13,    14,
lllll,      12,        16,    17,
eeeee,       2,        51,    52,
zzzzz,       9,      1000,   101,

ファイル2

Patient_No., Tumor_ID,  Normal_ID, 
4,            xxxxx,     hhhhh,            
5,            nnnnn,     aaaaa,          
8,            lllll,     ddddd,     
7,            eeeee,     ggggg,     
3,            zzzzz,     nnnnn,      

ファイル1から新しいフィールド(-f15など)を作成し、ファイル2のNormal_ID値を新しく作成されたファイル1フィールドの対応するTumor_ID値に割り当てるにはどうすればよいですか。私の質問は理解できますか?

ベストアンサー1

これは効果的な解決策ですが、さらなる改善が必要な場合があります。

データをカンマで区切るために、file2のすべてのスペースとタブを削除しました。これは簡単にできます

tr -d " " <file2 > file-b

また、初期値がNAのfile1(現在はfile-aと呼ばれる)に新しいプレースホルダフィールド番号5を追加しました。

これは次の方法で行うことができます。

sed  's/$/\tN.A./' file1 > file-a

したがって、新しい入力ファイルは次のようになります。

$ cat file-a
Tumor_ID, Chromosome, start, end,       N.A.
xxxxx,       2,        12,    13,       N.A.
xxxxx,       3,        45,    46,       N.A.
xxxxx,       3,        48,    49        N.A.
xxxxx,       3,        51,    52,       N.A.
nnnnn,       5,       55,    59,        N.A.
nnnnn,       5,       57,    58,        N.A.
lllll,      11,       13,    14,        N.A.
lllll,      12,        16,    17,       N.A.
eeeee,       2,        51,    52,       N.A.
zzzzz,       9,      1000,   101,       N.A.

$ cat file-b
Patient_No.,Tumor_ID,Normal_ID,
4,xxxxx,hhhhh,
5,nnnnn,aaaaa,
8,lllll,ddddd,
7,eeeee,ggggg,
3,zzzzz,nnnnn,

目標を達成するためのコマンドは次のとおりです。

$ while IFS="," read a b c;do sed -i "/${b}/{s/N.A./${c}/}" file-a;done <file-b

$ cat file-a
Tumor_ID, Chromosome, start, end,       Normal_ID
xxxxx,       2,        12,    13,       hhhhh
xxxxx,       3,        45,    46,       hhhhh
xxxxx,       3,        48,    49        hhhhh
xxxxx,       3,        51,    52,       hhhhh
nnnnn,       5,       55,    59,        aaaaa
nnnnn,       5,       57,    58,        aaaaa
lllll,      11,       13,    14,        ddddd
lllll,      12,        16,    17,       ddddd
eeeee,       2,        51,    52,       ggggg
zzzzz,       9,      1000,   101,       nnnnn

自分に合ったフォーマットを使って出力を美しくすることができます。

おすすめ記事