awk - 从文件中提取染色体模式
问题描述
我有一个模式是染色体坐标,例如:
chr1 1000 2000 chr1 11000 12000
对于单个模式,我使用以下查询:
grep 'chr1\s\+1000\s\+2000\s\+chr1\s\+11000\s\+12000' DB_file.txt
对于此类模式的完整列表,我有一个查询文件:
cat query.txt
chr1\s\+1000\s\+2000\s\+chr1\s\+10000\s\+11000
chr1\s\+1000\s\+2000\s\+chr1\s\+14000\s\+15000
chr1\s\+1000\s\+2000\s\+chr1\s\+175000\s\+176000
chr1\s\+1000\s\+2000\s\+chr1\s\+1639000\s\+1640000
我怎样才能做到这一点 ?grep -f 花费的时间太长。谢谢
DB_file.txt 的示例
chr1 1000 2000 chr1 10000 11000 3 281 0 0.459585414218248 0 0 0 1218 1 1.88650643678468 0 0 0 0.000000425582664277006 3.87833663319237 0.000000425597761316606 0.201115300038799 0.743522481235195 0.822936566866982
chr1 1000 2000 chr1 11000 12000 4 281 0 0.459585414218248 0 0 0 459 1 0.710924839477969 0 0 0 0.000000355375953311341 1.75327208538672 0.000000192399150742434 0.068194541602096 0.101318817290739 0.81707019750747
chr1 1000 2000 chr1 12000 13000 5 281 0 0.459585414218248 0 0 0 1415 1 2.19163104109222 0 0 0 0.000000310867653966458 3.44281554060217 0.000000377804900731428 0.128881860609444 0.263803805858084 0.81707019750747
chr1 1000 2000 chr1 13000 14000 1 281 0 0.459585414218248 0 0 0 437 1 0.676850010570529 0 0 0 0.000000285200375223444 1.49690344452761 0.000000164265976667856 0.335040184988013 0.776177861586765 0.837324774202159
chr1 1000 2000 chr1 14000 15000 1 281 0 0.459585414218248 0 0 0 530 1 0.820893605497437 0 0 0 0.000000271516726063383 1.60662404023105 0.000000176306406449545 0.322230259464951 0.799436461434159 0.850447555722604
chr1 1000 2000 chr1 16000 17000 1 281 0 0.459585414218248 0 0 0 490 1 0.758939371120272 0 0 0 0.000000253854147173018 1.41695624386548 0.000000155492795574155 0.343542270137564 0.75754917047966 0.828368055880824
chr1 1000 2000 chr1 18000 19000 2 281 0 0.459585414218248 0 0 0 130 1 0.201351261725787 0 0 0 0.000000231422263301451 0.691389012939271 0.0000000758710869983566 0.119714987783608 0.152817308925748 0.81707019750747
编辑: DB_file.txt 很大,有 4636593 行,因为 grep 花费的时间太长。我怎样才能加快速度?谢谢
解决方案
看起来您的字段DB_File.txt
由制表符分隔,而不是任意空格。如果是这种情况,如果您将query.txt
文件更改为使用 TSV 数据,则可以使用
grep -Ff query.txt DB_File.txt
这应该比正则表达式版本更快。
要将现有query.txt
文件更改为使用文字选项卡:
perl -pi -e 's/\Q\s\+/\t/g' query.txt
如果您要经常使用此数据文件,另一种选择是将其导入 sqlite 数据库(或 postgres 或其他),并在创建适当的索引后使用 SQL 查询它,这样整个表就不必被扫描。
推荐阅读
- javascript - 是否有任何 TC39 提案将属性从一个对象分配给另一个对象?
- sparql - JENA 中的 OWL 查询
- python - 如何使用 Pycharm 运行 fast-api 服务器?
- node.js - 当我尝试使用 uuid 包时,如何解决“意外令牌'导出'”错误?
- pandas - Pandas Correlation - 如何使用 df.corr() 忽略两列中的 0
- spring-webflux - 在 Spring Gateway 预过滤器中检查数据库的访问权限
- python - 异步 WebDriverWait until 在 Python 的 selenium
- reactjs - 太多的重新渲染。设置状态时
- c# - 获取与类型关联的所有命名空间?
- php - 错误不能使用 Omnipay\Stripe\Message\Response 类型的对象作为数组