Perl one-liner的包装脚本(用于从文本文件中提取列)

时间:2012-08-08 19:07:37

标签: perl shell

我有这个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单行程序,每次输入和输出文件名都会改变吗?

2 个答案:

答案 0 :(得分: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";
   }
}

答案 1 :(得分:0)

你在Unix吗?你有bash吗?

for i in {1..352} ; do
    perl -ale ... ./folder/input$i.txt > ./short_files/output$i.txt
done