2つのファイルがあります。ファイル1は次のようになります。
chr19 4124051 4124250 1
chrX 154458151 154458200 2
chr22 37019451 37019600 3
chr15 74995401 74995550 4
chr12 128823901 128824100 5
ファイル2は次のようになります。
chr19 4124051 4124250 1 CUP
chr15 74995401 74995550 4 CUP
chr12 128823901 128824100 5 CUP
chr12 122752651 122752950 8 CUP
chr13 113297001 113297350 9 CUP
私は次のようなFile3が欲しい。
chr19 4124051 4124250 1 CUP
chrX 154458151 154458200 2
chr22 37019451 37019600 3
chr15 74995401 74995550 4 CUP
chr12 128823901 128824100 5 CUP
File1の列4に基づいて2つのファイルをマージして一致する場合は、File2の列5の値をFile1の最後の列に追加したいと思います。
私はこれに疲れました。
awk 'FNR==NR{a[$4]=$5;next} {print $1,$2,$3,$4,a[$4]}' File2 File1 > file3
しかし、うまくいきません。各行の下に追加の行を作成します。
私もJoinコマンドを試しました。
join -1 4 -2 4 -o'1.1,1.2,1.3,1.4,2.5' File1 File2
空のファイルが生成されます。
どんな提案がありますか?
ベストアンサー1
ファイルはWindowsで作成されたため、Windowsスタイルの行末(\r\n
)があります。削除\r
すると、すべてが期待どおりに機能します。
sed -i 's/\r//' File1
sed -i 's/\r//' File2
awk 'FNR==NR{a[$4]=$5;next} {print $1,$2,$3,$4,a[$4]}' File2 File1 > file3