我有一个文件夹,其中包含一些像这样的文件:
MonteCarlo_LHE_50-150_Tune_v14-v1.txt
MonteCarlo_LHE_50-150_Tune_v14_ext1-v1.txt
我想将这些文件的内容连接到具有通用基本名称的单个文件中,如下所示:
MonteCarlo_LHE_50-150_Tune_v14.txt
我知道这可以通过以下方式完成:
cat inputfiles > outputfiles
但是,我知道使用Rakefile可以做到这一点。我想使用rake,因为我有大量的输入文件,例如上面提到的文件,并且想使其自动化。任何帮助表示赞赏。
答案 0 :(得分:0)
我有一个基本版本,但如果有人有一个非常完善的版本,请发布:
def get_sample_names(substring)
inputs = Dir.glob("inputs/test/*.txt").select {|x| x.include? substring}
inputs = inputs.map{|x| File.basename(x).sub(".txt", ".txt")}
inputs.push(substring+'.txt')
return inputs
end
samples = Hash[
"mc" => get_sample_names('MonteCarlo_LHE_50-150_Tune_v14'),
]
def concat_text_files(the_samples, numberofsamples)
i = 0
loop do
sh "cat inputs/test/#{the_samples[i]} inputs/test/#{the_samples[i+1]} > inputs/test/#{the_samples[i+2]}"
i += 3
if i == 3*numberofsamples
break
end
end
end
task :concatText => concat_text_files(samples['mc'], numberofsamples=1)
此解决方案的缺点是我们必须在运行rake之前定义所有预期的样本名称。