Bash脚本将一个文件拆分为n个文件,每个文件包含x个记录

时间:2018-12-16 21:26:41

标签: bash shell unix

我有一个要求,我需要编写一个bash脚本以将单个输入文件拆分为'n'个文件,并且每个文件的记录数量不得超过'x'个(最后一个文件除外,因为最后一个文件将具有剩下的一切)。用户将'n'和'x'的值作为参数传递给脚本。

n应该是分割文件的总数

x应该是拆分文件(最后一个文件除外)中的最大记录数。

假设输入文件有5000条记录,并且用户将n和x的参数值分别设置为3和1000,则文件1和2应分别包含1000条记录,文件3应包含3000条记录。 另一个例子是,如果输入文件具有4000条记录,并且用户将n和x的参数值分别设置为2和3000,则文件1应该包含3000条记录,文件2应该包含1000条记录。

我尝试了以下命令:

split -n$maxBatch -l$batchSize --numeric-suffixes $fileDir/$nzbnListFileName $splitFileName

但是它引发了一个错误,即拆分不能以多种方式完成。

请告知。

2 个答案:

答案 0 :(得分:2)

您需要提供-n参数或-l参数。不是他们两个在一起。

split -l1000 --numeric-suffixes yourFile.txt

答案 1 :(得分:0)

诸如split之类的声音不足以满足您的要求-它可以做X个文件或N个文件,但不能组合。尝试这样的事情:

awk -v prefix=$splitFileName -v lines=$x -v maxfiles=$n '
 (NR - 1) % lines == 0 && fileno < maxfiles { fileno +=1 }
 { print >> prefix fileno }' input.txt

这将使计数器每X行递增一次,最多N次,然后将行写入名称取决于计数器的文件中。