我想使用 file 的編號根據 file 指定的順序whitelist.txt
從 file 取得唯一的識別號碼。例子: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
(不是file.txt
)。
答案1
根據修改後的數據,請嘗試如下操作:
$ sed -nf <(sed 's/.*/&p/g' whitelist.txt) list.txt >newfile.txt
這會將檔案的條目whitelist.txt
從 ie轉換2
為2p
指示外部sed
列印該行2
==> 等於sed -n '2p'
==> 列印第二行。
對於 的所有條目都會發生相同的情況whitelist.txt
,建立一個 sed 腳本(透過進程替換提供外部 sed),包含2p
、5p
、7p
等,並且列印 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