我的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;
答案 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