-1

像这样的东西应该如何写成单行?

我很想把所有东西都放在while-loop 和perl -e '...' data中,但是有没有更好的方法,然后有if-statements?

open(F, '<', 'data') or die $!;

while (my $line = <F>) {

    if ($line =~ m/test /) {
        my @a = split / /, $line;
        printf("%2s %4s %4s\n", substr($a[1], 1), $a[2], substr($a[5], 0, -1));
    } else {
        print $line;
    }

}

close F;
4

2 回答 2

6

首先,让我们清理一下实际的程序。

while (<>) {
   if (/test/) {
      my @a = split;
      $_ = sprintf("%2s %4s %4s\n", substr($a[1], 1), $a[2], substr($a[5], 0, -1));
   }

   print;
}

然后,很容易利用-pand -a(“制作单线”)。

perl -pale'$_ = sprintf("%2s %4s %4s", substr($F[1], 1), $F[2], substr($F[5], 0, -1)) if /test/' data
于 2012-12-31T00:59:30.073 回答
1

像这样丑陋的东西:

perl -anle 'printf("%2s %4s %4s", substr($F[1], 1), $F[2], substr($F[5], 0, -1)),next if grep /test/, @F;print'

也许?但是为什么要使用单线呢?

于 2012-12-31T00:42:27.167 回答