【发布时间】:2021-07-20 15:25:49
【问题描述】:
我有两个如下所示的巨型文件:
f1:
chr1,3073253,3074322,gene_id,"ENSMUSG00000102693.1",gene_type,"TEC"
chr1,3074253,3075322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3077253,3078322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3102916,3103025,gene_id,"ENSMUSG00000064842.1",gene_type,"snRNA"
chr1,3105016,3106025,gene_id,"ENSMUSG00000064842.1",transcript_id,"ENSMUST00000082908.1"
f2:
chr,name,start,end
chr1,linc1320,3073300,3074300
chr3,linc2245,3077270,3078250
chr1,linc8956,4410501,4406025
我想要做的是在文件 1 的单独列中打印文件 2 的行,如果文件 2 的 start 和 end 列的范围在文件 1 的范围内(第 2 列和第 3 列),并且chr 是一样的。所以根据我提供的虚拟示例文件 - 所需的输出应该是(只有linc1320 的范围在文件1的第一行):
chr1,3073253,3074322,gene_id,"ENSMUSG00000102693.1",gene_type,"TEC",linc1320,3073300,3074300
chr1,3074253,3075322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3077253,3078322,gene_id,"ENSMUSG00000102693.1",transcript_id,"ENSMUST00000193812.1"
chr1,3102916,3103025,gene_id,"ENSMUSG00000064842.1",gene_type,"snRNA"
chr1,3105016,3106025,gene_id,"ENSMUSG00000064842.1",transcript_id,"ENSMUST00000082908.1"
我不是专业的编码员,但我一直在使用此代码根据 file2 手动更改范围:
awk -F ',' '$2<=3073300,$3>=3074300, {print $1,$2,$3,$4,$5,$6,$7}' f1.csv
我对使用特定的编程语言没有特别的偏好 - Python 和 awk 都会很有帮助。感谢您提供任何帮助。
【问题讨论】:
-
您可以在 python 中使用 pandas 库还是希望在核心 python 中使用脚本?
-
我也想有 pandas 的解决方案 - 谢谢。