美文网首页rice related analysis
[linux]根据一串ID批量提取另外一个文件的指定行

[linux]根据一串ID批量提取另外一个文件的指定行

作者: 郑宝童 | 来源:发表于2018-11-03 14:19 被阅读85次

一、待解决问题

    科室里的一个小伙伴打算根据A文件中的ID列,提取B文件中所有包含相应ID的行。
  • A文件如下所示。tip:ID列指的是图中带红框的那列,A大小73.1MB、B大小约1GB
    image.png
  • B文件是从网上下载的注释文件"GCF_000001405.38_GRCh38.p12_genomic.gff"

二、解决办法

    左思右想觉得这个处理过程还是用linux来做比较简单。
    1. 用excel手动删除A多余列只保留第二列中的ID值,保存为ref.txt
    1. 书写linux代码进行提取
#!/bin/bash

cat -A ref.txt | while read id;
do
    real_id=`echo $id| cut -d"^" -f1`
    grep $real_id GCF_000001405.38_GRCh38.p12_genomic.gff >>ref.gff
done

三、解析

四、代码思路

cat提取整个文件内容;用|管道符号传给 while read读取,
由于window下的回车符号与Linux下的回车不一样:window下的回车到了linux下会多出^M,所以在代码中用cut -d"^"分割文件,并取第一部分作为ID。最后使用grep 搜索ID 然后>>输出到ref.gff文件去

相关文章

网友评论

    本文标题:[linux]根据一串ID批量提取另外一个文件的指定行

    本文链接:https://www.haomeiwen.com/subject/pqfkxqtx.html