我在目录中有九个文本文件,每个文件有1000行。我想从每个中取出前500行,然后将所有这些行写入另一个文本文件,然后从每个文本文件中取出其余的(最后500行),并执行与之前相同的操作。
awk '{if (NR<=500) {print}}' 1.txt > 2.txt # I do it 9 times, then I use cat to append.
awk '{if (NR>500) {print}}' 3.txt > 4.txt
或
awk 'NR>500' 3.txt > 4.txt
我用awk做过,但我想学习Perl。
答案 0 :(得分:1)
在Perl中$.
具有上次访问的文件句柄的行号。在while ($. <=500 )
-cycle中,您可以获得所需的行数。
答案 1 :(得分:0)
perl -e 'open(F1,">1.txt");
open(F2,">2.txt");
foreach (@ARGV) {
open(F,"<$_");
while(<F>) {
print F1 $_ if ($. <= 500);
print F2 $_ if ($. > 500);
}
close(F);
}
close(F1);
close(F2);' <FILES>
答案 2 :(得分:0)
您的解释可能更符合您的示例。但基于您希望所有9000行都进入单个文件的想法。
我不知道你要在哪里指定你的名字,所以我使用了命令行。
use English qw<$OS_ERROR>;
open( my $out_h, '>', $outfile_name )
or die "Could not open '$outfile_name'! - $OS_ERROR"
;
my @input_h;
foreach my $name ( @ARGV ) {
open( $input_h[ $_ ], '<', $name )
or die "Could not open '$name'! - $OS_ERROR"
;
}
foreach my $in_h ( @input_h ) {
my $lines_written = 0;
while ( $lines_written++ < 500 ) {
print $out_h scalar <$in_h>;
}
}
foreach my $in_h ( @input_h ) {
print $out_h <$in_h>;
}
close $out_h;
close $_ foreach @input_h;
答案 3 :(得分:0)
open(F1,">1.txt");
open(F2,">2.txt");
open(F,"<$_");
while(<F>) {
print F1 $_ if ($. <= 500);
print F2 $_ if ($. > 500);
}
close(F);
close(F1);
close(F2);
我删除了foreach语句然后它工作,不是很奇怪。谢谢你的帮助..