我想将文件拆分成相等的部分,最后一个文件获取 Unix 中的剩余记录。例如:文件有 4 行,我想拆分成 4 个文件 = 太棒了。每个文件 1 行。
我有 5 行,我想将其拆分成 4 个文件。我真正想要的是:
File - number of lines;
f1 - 1;
f2 - 1;
f3 - 1;
f4 - 2;
这在 Unix 中是否可以通过直接 split 命令实现?我认为如果不对 split 进行一些额外的迭代编码,这是不可能的?
这是我尝试过的:
numsplitfile=$parm (lets say 4)
total_lines=$(wc -l < $inputfile) (lets say the file has 5 lines)
lines_per_file = (total_lines + numsplitfile - 1) / numsplitfile)
split -l $lines_per_file $inputfile splitfilename
这样做的目的是将其转换为:
split -l 2 $inputfile splitfilename
因此我得到了 3 个文件,每个文件有 2、2、1 行。但我想要的是 4 个文件中的 1、1、1、2 行。
答案1
看起来您无法仅使用 split 命令来执行此操作,但您可以解决这个问题。
尝试以下操作:
#!/bin/bash
inputfile=$1
parts=$2
total_lines=$(wc -l < "$inputfile")
lines_per_file=$[$total_lines / $parts]
rm out* 2>/dev/null
split -d -l $lines_per_file "$inputfile" out
extra_files=$(printf "out%02i\n" `seq $parts $[$parts * 2 - 1]`)
last_file=$(printf "out%02i\n" $[$parts - 1])
cat $extra_files >> $last_file 2>/dev/null # ignore errors
rm $extra_files 2>/dev/null # ignore errors
命名它split_file
然后你可以像这样调用它:
$ ./split_file input_file 4
分割文件将被称为out00
out01
out02
等等...