Text-Processing
如何比較文件 1 的第 2 列和第 3 列以及文件 2 的第 4 列和第 5 列
我有一個製表符分隔的文件 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
這可能不是最有效的
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``a``b``FNR``$4``$5
如果數組值在範圍內,則列印舊行和目前行。輸出被寫入一個新文件
newfile
。