我正在努力让Perl单线工作:
$ perl -aln -F"\t" -i -e 'BEGIN{print qq(taxid:int:ncbitaxid\tname\tl:label)} print qq($F[0]\t$F[1]\trank,$F[2])' testing
用于测试的输入文件如下所示:
1 root no rank
2 Bacteria superkingdom
6 Azorhizobium genus
7 Azorhizobium caulinodans species
9 Buchnera aphidicola species
10 Cellvibrio genus
11 [Cellvibrio] gilvus species
13 Dictyoglomus genus
14 Dictyoglomus thermophilum species
16 Methylophilus genus
所需的输出如下所示:
taxid:int:ncbitaxid name l:label
1 root rank,no rank
2 Bacteria rank,superkingdom
6 Azorhizobium rank,genus
7 Azorhizobium caulinodans rank,species
9 Buchnera aphidicola rank,species
10 Cellvibrio rank,genus
11 [Cellvibrio] gilvus rank,species
13 Dictyoglomus rank,genus
14 Dictyoglomus thermophilum rank,species
16 Methylophilus rank,genus
我已经能够使用以下内容重新创建它,但我想在适当的位置进行编辑,而不是打印到另一个文件。
perl -aln -F"\t" -e 'BEGIN{print qq(taxid:int:ncbitaxid\tname\tl:label)} print qq($F[0]\t$F[1]\trank,$F[2])' testing
答案 0 :(得分:2)
请参阅perlrun, the -i switch for in-place editing。
请参阅perlvar, $. line number for the last filehandle accessed。
perl -aln -i.bak -F"\t" -e 'print qq(taxid:int:ncbitaxid\tname\tl:label) if $.==1; \
print qq($F[0]\t$F[1]\trank,$F[2])' testing
答案 1 :(得分:1)
使用in place editing的-i
开关:
perl -i -aln -F"\t" -e'
print qq(taxid:int:ncbitaxid\tname\tl:label) if $. ==1;
print qq($F[0]\t$F[1]\trank,$F[2])
' testing
<强> -i [延伸] 强> 指定由&lt;&gt;处理的文件构造将被就地编辑。它通过重命名输入文件,按原始名称打开输出文件,并选择该输出文件作为print()语句的默认值来完成此操作。