如何打印文件1和文件2中的行,其中文件1中的列9小于文件2中的列4



我需要帮助。我试着也无济于事。如何将file1和file2中的行打印到输出文件中,其中file1的第2列与file2的第1列相同,然后$9 file1>=$4 file2&amp$10文件1<=$5

file1

BG chr20   100.000 15      0       0       1       15      13242327        13242341        5.1     
BG chr2    100.000 15      0       0       1       15      70212527        70212541        5.1     
BG chr2    100.000 15      0       0       1       15      216745730       216745744       5.1     
BG chr1    100.000 15      0       0       1       15       6195235       6195335        5.1   

file2

chr1    hg38_refGene    stop_codon      67093005        67093007        
chr1    hg38_refGene    CDS     67093008        67093604        
chr2    hg38_refGene    exon    216645730       216845744        
chr1    hg38_refGene    CDS      6095235      6395421

输出

BG chr2    100.000 15      0       0       1       15      216745730       216745744       5.1  chr2    hg38_refGene    exon    216645730       216845744 
BG chr1    100.000 15      0       0       1       15       6195235       6195335        5.1    chr1    hg38_refGene    CDS      6095235      6395421  

代码

awk 'NR == FNR {A[$1] = $0; next} $1 in A {split(A[$1], T)} {if ( T[9] >= $4 && T[10] <= $5 )print A[$1], $0}' file1 file2 >output

join就是为此而设计的。需要注意的是,join需要两个排序的输入文件(对于初次使用的用户来说,这通常是一个陷阱(。

所以,试试这个:

join -1 2  <( sort -k2,2 file1 ) <( sort file2 )

这是输出:

chr1 BG 100.000 15 0 0 1 15 6195235 6195335 5.1 hg38_refGene CDS 6095235 6395421
chr1 BG 100.000 15 0 0 1 15 6195235 6195335 5.1 hg38_refGene CDS 67093008 67093604
chr1 BG 100.000 15 0 0 1 15 6195235 6195335 5.1 hg38_refGene stop_codon 67093005 67093007
chr2 BG 100.000 15 0 0 1 15 216745730 216745744 5.1 hg38_refGene exon 216645730 216845744
chr2 BG 100.000 15 0 0 1 15 70212527 70212541 5.1 hg38_refGene exon 216645730 216845744

然后,如果您愿意,可以使用awk更改列顺序。

文件1中的键是字段2,而不是字段1。
$ awk 'NR==FNR {a[$2]=$0; next} 
$1 in a {split(a[$1],t); 
if(t[9]>=$4 && t[10]<=$5) print a[$1], $0}' file1 file2 | column -t
BG  chr2  100.000  15  0  0  1  15  216745730  216745744  5.1  chr2  hg38_refGene  exon  216645730  216845744
BG  chr1  100.000  15  0  0  1  15  6195235    6195335    5.1  chr1  hg38_refGene  CDS   6095235    6395421

最新更新