Perl新手,可以使用一些帮助。在Perl中使用哈希,尝试将原始文件中的一行删除到新文件中,如果该值小于或等于20。
原始文件:
apple 30
orange 45
pear 2
产生的两个文件是:
apple 30
orange 45
pear 2
到目前为止,这是我的代码:
use strict; use warnings;
use Data::Dumper;
open (INFILE1, 'sample.txt') or die "Cannot open INFILE1: $!\n";
open (OUTFILE, '>output.txt') or die "Cannot open OUTFILE: $!\n";
my %Hash;
while(<INFILE1>){
chomp;
my ($k, $v) = split(/\s+/);
push @{$Hash{'INFILE1'}{$k}},$v;
}
我想接下来我必须使用foreach循环,但我不知道从哪里开始。
答案 0 :(得分:1)
您不需要哈希来执行此任务,因为您没有比较不同键的值。要读取文件中的所有行,您可以使用while (my $line = <$in_fh>)
。此外,不鼓励使用bareword文件句柄名称,而是使用标量:open (my $in_fh, 'sample.txt') ...
。把它们放在一起:
open (my $in_fh, 'sample.txt') or die "Cannot open INFILE1: $!\n";
open (my $out_fh, '>output.txt') or die "Cannot open OUTFILE: $!\n";
while (my $line = <$in_fh>)
{
chomp $line;
my ($k, $v) = split /\s+/, $line;
if ($v > 20)
{
print $out_fh $line . "\n";
}
}
答案 1 :(得分:-1)
$ perl -wane 'print if $F[1] <= 20' input.txt > output.txt
-w
开关打开警告。
-n
开关在程序周围创建一个while (<>) { ... }
循环。
-a
开关启用自动分割模式,该模式会为每一行将$_
拆分为@F
。
-e
开关指定我们的简短过滤程序。