fileで指定された順序に従ってwhitelist.txt
ファイルから一意の識別番号を取得するためにファイル番号を使用したいと思います。例:list.txt
whitelist.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の対応する行を印刷します。2
2p
sed
2
sed -n '2p'
whitelist.txt
2p
5p
7p
代替案: 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