使用开始块,同时使用 Perl 单行就地编辑

  • 本文关键字:单行 编辑 Perl 开始 perl
  • 更新时间 :
  • 英文 :


我正在尝试让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() 语句的默认值来实现此目的。

最新更新