split 有一个选项“--number=CHUNKS”,可让您将文件分成多个块。
这是来自“split --help”的(修剪过的)输出:
-n, --number=CHUNKS generate CHUNKS output files; see explanation below
...
CHUNKS may be:
N split into N files based on size of input
K/N output Kth of N to stdout
l/N split into N files without splitting lines
l/K/N output Kth of N to stdout without splitting lines
r/N like 'l' but use round robin distribution
r/K/N likewise but only output Kth of N to stdout
如果将其拆分为 5 个部分,则命令为:
split --number=l/5 inputfile outputprefix
不过,这可能不会导致它们具有相同的行数。
如果您希望它们在最后一行之前都具有相同的行数,您可以使用以下命令:
split -l $(( ($(cat "inputfile" | wc -l) + 5 - 1)/5 )) inputfile outputprefix
这里的两个 5 都可以替换为任何其他数字(确保它们相同)。
以下是对该命令的逐条解释:
$( ) 返回您输入的任何命令的输出。 cat 在这里用于确保 wc 只返回行数而不输出输入文件名。
$(( )) 将括号内的内容作为数学表达式(仅使用整数)求值并返回结果。
($(cat "inputfile" | wc -l) + 5 - 1)/5 获取输入文件的行数并加 5,减 1,然后将结果除以 5。除法前的加法和减法确保结果四舍五入,以便准确给出部分数你想要(在这种情况下是 5 个)。
您还可以使用split --number=r/5 将其拆分为四个文件,其中每一行分布在它们之间,如下例所示:
inputfile.txt:
1
2
3
4
5
6
7
8
9
outputfile1:
1
6
outputfile2:
2
7
outputfile3:
3
8
outputfile4:
4
9
outputfile5:
5
这不会保留文件顺序。但在不重要的情况下它可能很有用。