Как добавить несколько строк из нескольких текстовых файлов в другой? - PullRequest
0 голосов
/ 30 марта 2011

У меня есть девять текстовых файлов в каталоге, каждый из которых содержит 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 ]

1 голос
/ 30 марта 2011

В Perl $. имеет номер строки последнего доступного дескриптора файла. В while ($. <=500 ) -цикле вы можете получить желаемое количество строк.

0 голосов
/ 30 марта 2011
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, тогда он работает, разве это не странно. спасибо за вашу помощь, кстати ..

0 голосов
/ 30 марта 2011

Ваше объяснение может больше соответствовать вашему примеру. Но исходя из идеи, что вы хотите, чтобы все 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;
0 голосов
/ 30 марта 2011
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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...