我想使用 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