我有一个简单的ascii文本文件,每行都有一个字符串,类似于
aa1
aa2
ab1
...
共有N行。我知道我可以使用split命令将其拆分为每个文件的固定行数。如何指定要将其拆分为的文件数,并让split决定每个文件中包含多少行。例如,如果文件有100行,我希望能够指定
split 3 foo.txt
它将写出三个文件xaa xab和xac,每个文件有33,33和34行。这甚至可能吗?或者我为此编写自定义Perl脚本?
答案 0 :(得分:1)
尝试这样做:
split -n 3 file
见
man split | less +/'^\s*-n'
答案 1 :(得分:1)
没有选项[*]
您可以使用'wc'来获取行数,并除以3,因此您想要使用的任何脚本都是几行。
([*]更新:在ubuntu上有,这就是问题所在。-n似乎并不存在于所有Linux或更旧版本。)
答案 2 :(得分:0)
鉴于您的评论中{/ 1}}中没有-n选项,您可以采取稍微粗略的方法。
split
如果您经常这样做,您可以通过获取分割和文件名的数量将其存储在脚本中,如下所示:
lines=`wc -l < foo.txt`
lines=$((lines/3+1))
split $lines foo.txt
答案 3 :(得分:0)
如果您的拆分实施不接受-n
参数,您可以使用此bash函数:
function split_n() { split -l $((($1+`wc -l <"$2"`-1)/$1)) "$2" "${3:-$2.}"; }
您可以将其作为
调用split_n 3 file.txt
或
split_n 3 file.txt prefix