ファイルAで指定された順序でファイルAの数字を使用して、ファイルBから一意のIDを取得します。

ファイルAで指定された順序でファイルAの数字を使用して、ファイルBから一意のIDを取得します。

fileで指定された順序に従ってwhitelist.txtファイルから一意の識別番号を取得するためにファイル番号を使用したいと思います。例: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(ただ数 2 ではないfile.txt) を含む入力サンプル ( ) に基づいていました。

答え1

変更されたデータに基づいて、次のことを試してください。

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

これにより、その行を外部に印刷==>等しい==> 2行目を印刷するようにwhitelist.txtファイルエントリがieに変換されます。のすべての項目に対して同じことが起こります。 、などを含むsedスクリプト(プロセス置換によって提供される外部sed)を作成し、list.txtの対応する行を印刷します。22psed2sed -n '2p'
whitelist.txt2p5p7p

代替案: 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

  • 次に、2番目の引数を使用して行を印刷します。つまり、list.txt行番号はですhash %h。注: $. は常に数値で > 0 なので、$h{$.}propah の代わりに使用できます。exists $h{$.}

結果

172363
612851
172418
19
72457

関連情報