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

一、待解决问题

    科室里的一个小伙伴打算根据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文件去

五、简便方法:

grep -f -w   file1 file2

file1是我们的id,file2是我们待检索的文件。上方代码功能是直接提取file2中包含Id的行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。