文件1中的键是字段2,而不是字段1。
我需要帮助。我试着也无济于事。如何将file1和file2中的行打印到输出文件中,其中file1的第2列与file2的第1列相同,然后$9 file1>=$4 file2&$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更改列顺序。
$ 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