Perl:从文件中读取文件列表后打印多个文件的内容

时间:2016-09-15 20:12:41

标签: bash perl

我的datafile.txt包含文件名列表:

/tmp/dir1/file1
/tmp/dir2/file2
/tmp/dir3/file3
...
/tmp/dir100/file100

我希望我的Perl脚本读取此datafile.txt文件,并让它从datafile.txt打印每个文件的内容。

也就是说,如何在Perl中完成以下操作?

for file in `cat datafile.txt`; do
       cat $file
done

我尝试了以下操作并遇到了困难:

use strict;
use warnings;

open(my $fh, '<', '/tmp/datafile.txt');

foreach my $filename (<$fh>) {
        open(my $fh1, '<', $filename);
        foreach(<$fh1>) {
                chomp;
                print "$_\n";
        }
        close $fh1;
}

close $fh;

1 个答案:

答案 0 :(得分:0)

  open my $fh_list, '<', '/tmp/datafile.txt' or die;
  while(<$fh_list>){
    chomp;
    open my $fh, '<', $_ or die "Cannot read $_\n";
    print while <$fh>;
    close $fh;
  }
  close $fh_list;

...或使用File::Slurp并给予足够的记忆,这可能只是:

use File::Slurp;
print read_file($_) for map{chomp;$_} read_file('/tmp/datafile.txt');

当然,您可以使用此linux命令完全跳过perl:

cat /tmp/datafile.txt | xargs cat