我正在尝试让Perl单行代码工作:
$ perl -aln -F"t" -i -e 'BEGIN{print qq(taxid:int:ncbitaxidtnametl: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:ncbitaxidtnametl:label)} print qq($F[0]t$F[1]trank,$F[2])' testing
请参阅 perlrun,用于就地编辑的 -i 开关。
请参阅 perlvar, $. 行号,表示上次访问的文件句柄。
perl -aln -i.bak -F"t" -e 'print qq(taxid:int:ncbitaxidtnametl:label) if $.==1;
print qq($F[0]t$F[1]trank,$F[2])' testing
使用 -i
开关进行就地编辑:
perl -i -aln -F"t" -e'
print qq(taxid:int:ncbitaxidtnametl:label) if $. ==1;
print qq($F[0]t$F[1]trank,$F[2])
' testing
-i[扩展] 指定要就地编辑<>构造处理的文件。它通过重命名输入文件,按原始名称打开输出文件,并选择该输出文件作为 print() 语句的默认值来实现此目的。