次のファイルがあります。単一塩基多型データと呼ばれ、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.bed
from 行と一致しない場合は、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