如何使用awk或sed注释多行?

时间:2018-04-18 08:54:08

标签: awk sed

我有一个perl程序,我正在下载并在docker文件中使用。

这个程序正在调用tbl2asn,但我不需要输出,这部分运行时间很长。因此,我想对这个perl程序中的几行进行评论。

runcmd(
  "tbl2asn -V b -a r10k -l paired-ends -M n -N 1 -y 'Annotated using $EXE $VERSION from $URL' -Z".
  " \Q$outdir/$prefix.err\E -i \Q$outdir/$prefix.fsa\E 2> /dev/null"
);
delfile("$outdir/errorsummary.val");
delfile( map { "$outdir/$prefix.$_" } qw(dr fixedproducts ecn val) );

msg("Repairing broken .GBK output that tbl2asn produces...");
runcmd("sed 's/COORDINATES: profile/COORDINATES:profile/' < \Q$outdir/$prefix.gbf\E > \Q$outdir/$prefix.gbk\E");
delfile("$outdir/$prefix.gbf");

这些是我想评论的行,至少这行"tbl2asn -V b -a r10k -l paired-ends -M n -N 1 -y 'Annotated using $EXE $VERSION from $URL' -Z".只在perl程序中出现一次。

如何使用awk或sed通过正则表达式对此行进行注释,前一行和后八行?

谢谢。

1 个答案:

答案 0 :(得分:1)

Awk 解决方案:

示例file.pl

some text
runcmd(
  "tbl2asn -V b -a r10k -l paired-ends -M n -N 1 -y 'Annotated using $EXE $VERSION from $URL' -Z".
  " \Q$outdir/$prefix.err\E -i \Q$outdir/$prefix.fsa\E 2> /dev/null"
);
delfile("$outdir/errorsummary.val");
delfile( map { "$outdir/$prefix.$_" } qw(dr fixedproducts ecn val) );

msg("Repairing broken .GBK output that tbl2asn produces...");
runcmd("sed 's/COORDINATES: profile/COORDINATES:profile/' < \Q$outdir/$prefix.gbf\E > \Q$outdir/$prefix.gbk\E");
delfile("$outdir/$prefix.gbf");
some text
awk '/"tbl2asn -V b .+ -Z"\.$/{ n = NR + 9 }NR <= n{ rec = "#"rec }
     rec{ print rec }{ rec = $0 }
     END{ print rec }' file.pl

输出:

some text
#runcmd(
#  "tbl2asn -V b -a r10k -l paired-ends -M n -N 1 -y 'Annotated using $EXE $VERSION from $URL' -Z".
#  " \Q$outdir/$prefix.err\E -i \Q$outdir/$prefix.fsa\E 2> /dev/null"
#);
#delfile("$outdir/errorsummary.val");
#delfile( map { "$outdir/$prefix.$_" } qw(dr fixedproducts ecn val) );
#
#msg("Repairing broken .GBK output that tbl2asn produces...");
#runcmd("sed 's/COORDINATES: profile/COORDINATES:profile/' < \Q$outdir/$prefix.gbf\E > \Q$outdir/$prefix.gbk\E");
#delfile("$outdir/$prefix.gbf");
some text