??[linux]根據(jù)一串ID批量提取另外一個(gè)文件的指定行

一、待解決問題

    科室里的一個(gè)小伙伴打算根據(jù)A文件中的ID列,提取B文件中所有包含相應(yīng)ID的行。
  • A文件如下所示。tip:ID列指的是圖中帶紅框的那列,A大小73.1MB、B大小約1GB
    image.png
  • B文件是從網(wǎng)上下載的注釋文件"GCF_000001405.38_GRCh38.p12_genomic.gff"

二、解決辦法

    左思右想覺得這個(gè)處理過程還是用linux來做比較簡(jiǎn)單。
    1. 用excel手動(dòng)刪除A多余列只保留第二列中的ID值,保存為ref.txt
    1. 書寫linux代碼進(jìn)行提取
#!/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提取整個(gè)文件內(nèi)容;用|管道符號(hào)傳給 while read讀取,
由于window下的回車符號(hào)與Linux下的回車不一樣:window下的回車到了linux下會(huì)多出^M,所以在代碼中用cut -d"^"分割文件,并取第一部分作為ID。最后使用grep 搜索ID 然后>>輸出到ref.gff文件去

五、簡(jiǎn)便方法:

grep -f -w   file1 file2

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容