我有一個名為 IDs_list.txt 的 ID 檔案,我想使用它從具有數百個 ID 的第二個檔案中提取資訊,其中許多 ID 不在我的特定 IDS_list.txt 中。
我嘗試過 if 和 grep 的組合,但我的結果一直是空的。
這是我正在嘗試做的事情以及我已經完成的事情的示例。
cat IDS_list.txt | head -n 4
24
43
56
69
cat sample1.txt | head -n 4
NODE_1_length_148512_cov_24.5066,gi|573017271|gb|CP006568.1|,148512,4513140,8,7289,86.545,0.0,13461,24,madeup species 1
NODE_2_length_122550_cov_25.719,gi|84778498|dbj|AP008232.1|,122550,4171146,13,12690,93.693,0.0,23435,244,madeup species 2
NODE_3_length_103385_cov_25.9802,gi|84778498|dbj|AP008232.1|,103385,4171146,6,4243,88.782,0.0,7836,43,madeup species 3
NODE_4_length_101672_cov_25.6536,gi|84778498|dbj|AP008232.1|,101672,4171146,7,4139,86.799,0.0,7644,955,long name here
ID 位于第 10 列。
我需要提取 ID 在 IDS_list.txt 中的所有行。
所以我的輸出應該是:
NODE_1_length_148512_cov_24.5066,gi|573017271|gb|CP006568.1|,148512,4513140,8,7289,86.545,0.0,13461,24,madeup species 1
NODE_3_length_103385_cov_25.9802,gi|84778498|dbj|AP008232.1|,103385,4171146,6,4243,88.782,0.0,7836,43,madeup species 3
我試過了:
for file in sample?.txt; do awk 'FNR==NR{arr[$0];next} ($10 in arr)' IDs_list.txt $file; done
什么都沒有出來。這個例子是我從另一個堆疊溢位問題中獲取的。
for i in $(cat IDs_list.txt); do awk -F"," '$10 == $i' sample1.txt; done
但這將多次列印單個輸出,因為我正在逐行迭代 IDs_list.txt,所以這不是我想要的。我可能會得到第一個輸出行數百次,因為我的 IDs_list.txt 有數百個 ID。
然后我用 awk 嘗試了 grep 但這也不起作用。我的語法關閉了。
for file in sample?.txt; do for i in $(cat IDs_list.txt); do grep -w '$i' $file; done; done
這里沒有任何輸出。我的邏輯是,對于每個示例檔案,我想 grep 包含在 IDs_list.txt 中找到的 ID 的行。但是,我不喜歡不呼叫特定的第 10 列,因為 ID 有時會顯示在實際上不是 ID 的其他列中。
在 for 回圈中使用 grep 或 awk 或兩者以某種方式執行此操作的任何雄辯方式?
uj5u.com熱心網友回復:
你可以使用這個awk:
awk -F, 'NR==FNR {ids[$1]; next} $10 in ids' IDs_list.txt sample.txt
NODE_1_length_148512_cov_24.5066,gi|573017271|gb|CP006568.1|,148512,4513140,8,7289,86.545,0.0,13461,24,madeup species 1
NODE_3_length_103385_cov_25.9802,gi|84778498|dbj|AP008232.1|,103385,4171146,6,4243,88.782,0.0,7836,43,madeup species 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383843.html
下一篇:多重替換
