【发布时间】:2015-11-30 21:42:57
【问题描述】:
我是脚本新手,我正在尝试连接多个文件,这些文件的路径列出一个文本文件并输出一个组合的 gzip 文件。 例如列表文件 - File_list.txt 包含这些文件路径
/data/path/file1.txt
data2/path2/file2.txt
....file3.txt
....file4.txt
到目前为止,我的代码适用于本地目录中列出的所有文件(仅输出未压缩的组合文件):
#!/usr/bin/perl
use strict;
use File::Slurp;
my $directory = 'Users/xyz/Documents/';
opendir(dir, $directory) or die $!;
my @files = readdir(dir);
closedir dir;
my $outfilename = 'Combined.fastq'
my $outfilesrc = undef;
foreach (sort @files){
$outfilesrc.= File::Slurp::slurp("$basedir/$_");
}
open(OUT, "> $basedir/$outfilename") or die ("Can't open for writing:
$basedir/$outfilename : $!");
print OUT $outfilesrc;
close OUT;
exit;
有人可以分享如何使用此列表而不是单个目录来读取文件吗? 我知道在简单的 bash 中要容易得多,但我正在尝试为管道创建一个模块,所以在 Perl 中需要它。 谢谢!
【问题讨论】:
-
尝试将列表读入数组
@files。见The correct way to read a data file into an array -
“我知道使用简单的 bash 会容易得多” 只有当“简单 bash”是你唯一熟悉的语言时,这才是正确的
-
@Borodin 实际上你不需要“非常了解” bash 脚本:cat `cat file_list` >> new_file 比 perl 脚本简单
-
好吧,除非你想正确处理边缘情况,因为那个例子会中断,例如带空格的文件名。
-
是的,命令行/bash 对于文件数量有限的快速任务来说很容易。由于现在文件可以分散在整个目录中,并且来自不同的来源,我需要对其进行编码以避免任何可能的错误
标签: perl concatenation