使用rake合并文件

时间:2018-06-29 12:00:23

标签: concatenation rake

我有一个文件夹,其中包含一些像这样的文件:

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,因为我有大量的输入文件,例如上面提到的文件,并且想使其自动化。任何帮助表示赞赏。

1 个答案:

答案 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之前定义所有预期的样本名称。