根據檔案A指定的順序,使用檔案A中的數字從檔案B中取得唯一ID

根據檔案A指定的順序,使用檔案A中的數字從檔案B中取得唯一ID

我想使用 file 的編號根據 file 指定的順序whitelist.txt從 file 取得唯一的識別號碼。例子:list.txtwhitelist.txt

$ cat whitelist.txt:  
2  
5  
7  
10   
11
(+8,000 more lines)

$ cat list.txt  
2  
172363  
14  
17  
612851  
172414  
172418  
172419  
172424  
19  
72457  
(+ 150,000 more lines)

這樣我就可以重定向到一個新檔案:

$ cat newfile.txt  
172363  
612851  
172418  
19   
72457  
(+8,000 more lines)

注意:此問題已修改。以下 2017 年 5 月 5 日之前的答案是基於輸入樣本 ( list.txt),其格式為(例如第一行)>CLocus_2_Sample_(而不僅僅是數字 2),檔案名為file.fa(不是file.txt)。

答案1

根據修改後的數據,請嘗試如下操作:

$ sed -nf <(sed 's/.*/&p/g' whitelist.txt) list.txt >newfile.txt

這會將檔案的條目whitelist.txt從 ie轉換22p指示外部sed列印該行2==> 等於sed -n '2p'==> 列印第二行。
對於 的所有條目都會發生相同的情況whitelist.txt,建立一個 sed 腳本(透過進程替換提供外部 sed),包含2p5p7p等,並且列印 list.txt 的那些行。

替代方案:預處理whitelist.txt:

sed 's/.*/&p/g' whitelist.txt >whitelist2.txt  #or sed -i '....' whitelist.txt to overwrite whitelist.txt
sed -nf whitelist2.txt list.txt # you can redirect output to >newfile.txt

答案2

回覆您的最新修訂:

awk 'NR==FNR{z[$1]; next}FNR in z' whitelist.txt list.txt >newfile.txt

答案3

根據您所說的新規格,我們需要對其進行修改:

perl -e '
   $h{s/\n//r}++ for qx[cat ${\+shift}];
   $h{$.} && print while <>;
' whitelist.txt list.txt

解釋

  • hash %h首先使用文件內容填充whitelist.txt,這是需要傳遞給Perl程式碼的第一個參數。請注意,qx[]運算子只不過是backquote運算子。

  • 然後我們印第二個參數的行,即list.txt行號是hash %h.註:自 $.總是數字 AND > 0,這就是我們可以使用 just$h{$.}而不是 propah 的原因exists $h{$.}

結果

172363
612851
172418
19
72457

相關內容