一、待解决问题
科室里的一个小伙伴打算根据A文件中的ID列,提取B文件中所有包含相应ID的行。
A文件如下所示。tip:ID列指的是图中带红框的那列,A大小73.1MB、B大小约1GB
image.png
B文件是从网上下载的注释文件"GCF_000001405.38_GRCh38.p12_genomic.gff"
二、解决办法
左思右想觉得这个处理过程还是用linux来做比较简单。
用excel手动删除A多余列只保留第二列中的ID值,保存为ref.txt
书写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用法就不赘述了,光是简书上就有很多,我直接挂简书几个链接:
1.everyday:linux cat
2.linux cat
3.情景linux—不曾了解的cat用法grep用法
1.linux grep命令
2.Linux常用指令---grep(搜索过滤)(转)
3.Linux文件比较三剑客(awk/grep/sed)之grep
四、代码思路
cat
提取整个文件内容;用|
管道符号传给 while read
读取,
由于window下的回车符号与Linux下的回车不一样:window下的回车到了linux下会多出^M
,所以在代码中用cut -d"^"
分割文件,并取第一部分作为ID。最后使用grep 搜索ID 然后>>
输出到ref.gff文件去