一、待解決問題
科室里的一個(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)單。
- 用excel手動(dòng)刪除A多余列只保留第二列中的ID值,保存為ref.txt
- 書寫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用法就不贅述了,光是簡(jiǎn)書上就有很多,我直接掛簡(jiǎn)書幾個(gè)鏈接:
1.everyday:linux cat
2.linux cat
3.情景l(fā)inux—不曾了解的cat用法 - while用法
1.Linux shell之while循環(huán)
2.Linux while 循環(huán)中使用ssh問題 - grep用法
1.linux grep命令
2.Linux常用指令---grep(搜索過濾)(轉(zhuǎn))
3.Linux文件比較三劍客(awk/grep/sed)之grep
四、代碼思路
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的行。
