[英]How do I obtain values(lines) from file2 using only indices in file1?
[英]How can I print lines from file1 and file2 where columns 9 in file 1 is less than column 4 in file 2
我需要幫助。 我試過無濟於事。 如何將 file1 和 file2 中的行打印到我的輸出文件,其中 file1 的 column2 與 file2 的 column1 相同,然后 $9 file1 >= $4 file2 && $10 file1 <= $5
文件 1
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
文件 2
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.