Ubuntu将文件拆分为三个文件,每个文件的总行数为三分之一

时间:2013-04-05 21:04:04

标签: perl shell ubuntu

我有一个简单的ascii文本文件,每行都有一个字符串,类似于

aa1
aa2
ab1
...

共有N行。我知道我可以使用split命令将其拆分为每个文件的固定行数。如何指定要将其拆分为的文件数,并让split决定每个文件中包含多少行。例如,如果文件有100行,我希望能够指定

split 3 foo.txt

它将写出三个文件xaa xab和xac,每个文件有33,33和34行。这甚至可能吗?或者我为此编写自定义Perl脚本?

4 个答案:

答案 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