根据大小合并多个文件:限制结果文件大小

时间:2018-06-15 02:42:46

标签: unix merge

在单个文件中合并多个文件不是unix中的问题。然而,我想将多个文件组合成更少的文件,并根据大小限制这些多个文件的形成。

以下是完整的解释: 1)有200个不同大小的文件,范围从1KB到2GB。 2)我希望随机组合多个文件,并创建多个5 GB的文件。 3)因此,如果每个文件有200个文件,范围从1KB到2GB,那么结果集可能是10个文件,每个5GB。

以下是我尝试制作的方法,但无法设计逻辑,需要一些帮助:

for i in ls /tempDir/`` do if [[ -r $i ]] then for files in find /tempDir/ -size +2G`` cat $files > combinedFile.csv fi done

这将只创建一个文件combinedFile.csv,无论大小如何。但我需要将combinedFile.csv的大小限制为5GB并创建多个文件combinedFile_1.csv combinedFile_2.csv, etc

此外,我还想检查一下,当创建这些多个合并文件时,行不会在多个文件中被破坏。

任何想法如何实现它?

1 个答案:

答案 0 :(得分:0)

我使用cat管理了一个解决方法,然后使用以下代码拆分文件:

for files in `find ${dir}/ -size +0c -type f`
do
        if [[ -r $files ]]
        then
                cat $files >> ${workingDirTemp}/${fileName}
        else
                echo "Corrupt Files"
                exit 1
        fi
done

cd ${workingDir}
split --line-bytes=${finalFileSize} ${fileName} --numeric-suffixes -e --additional-suffix=.csv ${unserInputFileName}_

cat是针对10 + Gigs等大文件的CPU密集型操作。有没有人有任何可以减少CPU负载或提高处理速度的解决方案?