0

我有这个用于从文本文件中提取列的 Perl 单行器,我在这个论坛中找到了它。

perl -ane "print qq(@F[0,1,3,4]\n)" ./folder/input.txt 
    > ./short_files/output.txt

我需要在 352 个具有名称的输入文件上运行它input1.txt, input2.txt,...,input352.txt并生成 352 个具有名称的输出文件output1.txt, output2.txt,..., output352.txt

任何人都可以帮助我使用包装器代码,以便我可以在循环中运行 Perl 单行程序,输入和输出文件名每次都在更改?

4

2 回答 2

1

您似乎想要一个 Perl 解决方案:

for my $in_file (glob('input*.txt')) {
   ( my $out_file = $in_file ) =~ s/input/output/;

   open(my $fh_in, '<', $in_file)
      or die("Can't open \"$in_file\": $!\n");

   open(my $fh_out, '>', $out_file)
      or die("Can't create \"$out_file\": $!\n");

   while (<$fh_in>) {
      my @F = split;
      print $fh_out "@F[0,1,3,4]\n";
   }
}
于 2012-08-08T19:35:46.723 回答
0

你在Unix吗?你有bash吗?

for i in {1..352} ; do
    perl -ale ... ./folder/input$i.txt > ./short_files/output$i.txt
done
于 2012-08-08T19:15:01.950 回答