如何在Perl中打印第二个字段为0且第三个字段为1的所有行。我特意寻找Perl解决方案,因为AIX Server中的限制很少(shell版本很旧),因此shell脚本无法正常工作。以下是示例文件:
237576 6 1 RMAN_Backup Default_Backup clmjk 1442149024 0000000055 1442149079 23328
237575 0 3 RMAN_Backup Default_Backup clmjk 1442148956 0000000053 1442149009 2848
237574 0 1 RMAN_Backup Default_Backup clmjk 1442148954 0000000045 1442148999 544
237573 0 1 RMAN_Backup Default_Backup clmjk 1442145436 0000000053 1442145489 23328
237572 0 3 RMAN_Backup Default_Backup clmjk 1442145352 0000000047 1442145399 544
答案 0 :(得分:4)
作为一个单行:
perl -ane 'print if 0 == $F[1] && 1 == $F[2]' input-file
-n
逐行读取输入行-a
将空格上的输入拆分为@F
数组答案 1 :(得分:1)
逐行读取文件并用空格分割,然后检查第二个字段是否为0,第三个字段是否为1,将其写入输出文件。
use warnings;
use strict;
open my $fh, "<", "file.txt" or die $!;
open my $fhout, ">", "outfile.txt" or die $!;
while (my $line = <$fh>)
{
chomp $line;
my @data = split (' ', $line);
if ($data[1] == 0 && $data[2] == 1)
{
print $fhout $line, "\n";
}
}
close $fh;
close $fhout;
输出(在输出文件'outfile.txt'中):
237574 0 1 RMAN_Backup Default_Backup clmjk 1442148954 0000000045 1442148999 544
237573 0 1 RMAN_Backup Default_Backup clmjk 1442145436 0000000053 1442145489 23328
答案 2 :(得分:1)
这种东西非常适合用作Unix过滤器(从STDIN读取并写入STDOUT)。
use warnings;
use strict;
while (<>) {
my @data = split;
print if $data[1] == 0 && $data[2] == 1;
}
像这样运行:
$ ./filter < input_file > output_file
事实上,将其编写为命令行程序
非常简单$ perl -ane 'print if $F[1] == 0 && $F[2] == 1' input_file > output_file