这样的事情怎么写成一个单行?
我很想把所有内容都放在while
- 循环和perl -e '...' data
中,但是有更好的方法,然后有if
- 语句吗?
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;
答案 0 :(得分:6)
首先,让我们清理实际的程序。
while (<>) {
if (/test/) {
my @a = split;
$_ = sprintf("%2s %4s %4s\n", substr($a[1], 1), $a[2], substr($a[5], 0, -1));
}
print;
}
然后,很容易利用-p
和-a
(“制作单行”)。
perl -pale'$_ = sprintf("%2s %4s %4s", substr($F[1], 1), $F[2], substr($F[5], 0, -1)) if /test/' data
答案 1 :(得分:1)
perl -anle 'printf("%2s %4s %4s", substr($F[1], 1), $F[2], substr($F[5], 0, -1)),next if grep /test/, @F;print'
可能?但是你为什么要使用单线?