2つのファイル間の交点

2つのファイル間の交点

次のファイルがあります。単一塩基多型データと呼ばれ、snp.bed次のようになります。

head snp.bed

    Chr17   214708483   214708484   Chr17:214708484
    Chr17   214708507   214708508   Chr17:214708508
    Chr17   214708573   214708574   Chr17:214708574

また、次の名前のファイルがありますintersect.bed

head intersect.bed

    Chr17   214708483   214708484   Chr17:214708484 Chr17   214706266   214710783   gene50573
    Chr17   214708507   214708508   Chr17:214708508 Chr17   214706266   214710783   gene50573
    Chr17   214708587   214708588   Chr17:214708580 Chr17   214706266   214710783   gene50573

snp.bed各行に追加の列を追加して、変更されたバージョンを印刷したいと思います。の行がのsnp.bed行の最初の4つの列と一致する場合は、行全体をintersect.bed印刷しsnp.bed(遺伝子名)、その行の最後の列に隣接して追加の列を取得したいと思います。intersect.bedあるいは、from 行がsnp.bedfrom 行と一致しない場合は、intersect.bed遺伝子名の代わりに文字列「NA」で構成される追加の列に隣接します。

これが私が望む結果です:

head snp.matched.bed

    Chr17   214708483   214708484   Chr17:214708484   gene50573
    Chr17   214708507   214708508   Chr17:214708508   gene50573
    Chr17   214708573   214708574   Chr17:214708574   NA

どうすればいいですか?

ベストアンサー1

このソリューションは、ファイルの行の先頭にスペースがないと仮定します。これらの空白がある例と違いは何ですか?

awk '
{
    str = $1$2$3$4; 
}
FNR == NR {
    arr[str] = $NF;
}
FNR != NR {
    gene_name = arr[str] ? arr[str] : "NA";
    print $0, gene_name;
}' intersect.bed snp.bed 

出力

Chr17   214708483   214708484   Chr17:214708484 gene50573
Chr17   214708507   214708508   Chr17:214708508 gene50573
Chr17   214708573   214708574   Chr17:214708574 NA

おすすめ記事