如何将多个文本文件中的某些行附加到另一个文本文件?

时间:2011-03-30 15:17:29

标签: perl awk

我在目录中有九个文本文件,每个文件有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。

4 个答案:

答案 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语句然后它工作,不是很奇怪。谢谢你的帮助..