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

发布于 2024-10-29 00:41:05 字数 375 浏览 1 评论 0原文

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

I have got nine text files in a directory, each has 1000 lines. I want to take the first 500 lines from each, then write all of them in order to another text file, and take the rest (the last 500 lines) from each one to do the same I do before.

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  

or

awk 'NR>500' 3.txt > 4.txt

I did it with awk, but I want to learn Perl instead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

放肆 2024-11-05 00:41:05

在 Perl 中 $. 包含上次访问的文件句柄的行号。在 while ($. <=500 ) 循环中,您可以获得所需的行数。

In Perl $. has line number of last accessed filehandle. In while ($. <=500 ) -cycle you can get wanted count of lines.

兰花执着 2024-11-05 00:41:05
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>
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>
清旖 2024-11-05 00:41:05

你的解释可能更符合你的例子。但基于这样的想法:您希望所有 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;

Your explanation could agree with your example more. But based on the idea that you want all 9000 lines to go into a single file.

I didn't know where you were going to specify your names, so I used the command line.

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;
红玫瑰 2024-11-05 00:41:05
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 语句然后它就起作用了,是不是很奇怪。顺便感谢你的帮助..

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);

i deleted foreach statement then it works, isnt that weird. thanks for ur help by the way..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文