【问题标题】:Bash script to Split a file into n files with each file containing x number of records用于将文件拆分为 n 个文件的 Bash 脚本,每个文件包含 x 条记录
【发布时间】:2018-12-17 11:05:46
【问题描述】:

我有一个要求,我需要编写一个 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

但它会抛出一个错误,即拆分不能以多种方式完成。

请指教。

【问题讨论】:

    标签: bash shell unix


    【解决方案1】:

    你要么需要给 -n 参数要么 -l 参数。不是他们两个在一起。

    split -l1000 --numeric-suffixes yourFile.txt
    

    【讨论】:

      【解决方案2】:

      听起来 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 次,并将行写入名称取决于计数器的文件。

      【讨论】:

        猜你喜欢
        • 2018-09-13
        • 1970-01-01
        • 1970-01-01
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多