タブ区切りのファイル1があります。
NC_025345 4569 4950 KX838946.2
NC_025345 16546 17066 KJ641660.1
NC_025345 11996 12085 KX932454.2
ファイル2:
NC_025345.1 RefSeq gene 5690 7513 . + . ID=gene-NZ82_gp4;Dbxref=GeneID:20964334;Name=NZ82_gp4;gbkey=Gene;gene_biotype=protein_coding;locus_tag=NZ82_gp4
NC_025345.1 RefSeq gene 8016 10046 . + . ID=gene-NZ82_gp5;Dbxref=GeneID:20964335;Name=NZ82_gp5;gbkey=Gene;gene_biotype=protein_coding;locus_tag=NZ82_gp5
NC_025345.1 RefSeq gene 10337 16933 . + . ID=gene-NZ82_gp6;Dbxref=GeneID:20964336;Name=NZ82_gp6;gbkey=Gene;gene_biotype=protein_coding;locus_tag=NZ82_gp6
ファイル1の列2と3をファイル2の列4と5と比較したいと思います。ファイル 1 の列 2 と列 3 がファイル 2 の列 4 と列 5 の間に重なっているか、該当する場合は、次の出力を使用して、ファイル 1 とファイル 2 の行全体を新しいファイルにマージしたいと思います。
NC_025345 11996 12085 KX932454.2 NC_025345.1 RefSeq gene 10337 16933 . + . ID=gene-NZ82_gp6;Dbxref=GeneID:20964336;Name=NZ82_gp6;gbkey=Gene;gene_biotype=protein_coding;locus_tag=NZ82_gp6
ベストアンサー1
これは最も効率的なawk
スクリプトではないかもしれません。
awk '{
if (NR==FNR) {
l[NR]=$0
a[NR]=$2
b[NR]=$3
}
else if (a[FNR]>=$4 && b[FNR]<=$5) {
print l[FNR],$0
}
}' file1 file2 > newfile
最初のファイル()を読み取るときは、行とフィールド全体を配列NR==FNR
の$0
インデックス$2
(レコード番号)に保存します$3
。NR
2番目のファイルを読み取ると、配列の値とa
指定b
されたインデックスFNR
(ファイルのレコード番号)の値がフィールドsumと$4
比較されます$5
。
配列値が範囲内にある場合は、前の行と現在の行を印刷します。出力は新しいファイルに書き込まれますnewfile
。