我有一个要求,我需要编写一个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
但是它引发了一个错误,即拆分不能以多种方式完成。
请告知。
答案 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次,然后将行写入名称取决于计数器的文件中。