1

我有一个简单的 ascii 文本文件,每行都有一个字符串,比如

aa1
aa2
ab1
...

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

split 3 foo.txt

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

4

4 回答 4

1

尝试这样做:

split -n 3 file

man split | less +/'^\s*-n'
于 2013-04-05T21:09:07.510 回答
1

没有选择[*]

您可以使用“wc”来获取行数,然后除以 3,因此它是您想要使用的任何脚本的几行。

([*]更新:在 ubuntu 上有,这就是问题所在。-n 似乎并非所有 linux 或更早版本都存在)。

于 2013-04-05T21:10:00.453 回答
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
于 2013-04-05T23:49:58.657 回答
0

鉴于您的评论是您的 中没有 -n 选项split,这是您可以采取的一种稍微复杂的方法。

lines=`wc -l < foo.txt`
lines=$((lines/3+1))
split $lines foo.txt

如果您经常这样做,您可以通过获取拆分数量和文件名将其存储在脚本中,如下所示:

splits=$1
filename=$2
lines=`wc -l < $filename`
lines=$((lines/$splits+1))
split $lines $filename
于 2013-04-05T23:26:51.110 回答