我想将一个流传输到split
。我知道流的字节数是多少(非常大,来自网络),我希望 split 创建 N 个大小相对相等的文件,而不将行分成两半。可以实现吗?例如:
cat STREAM | split $SIZE_OF_STREAM $NUMBER_OF_FILES_TO_PRODUCE
我无法通过文档找到实现该目标的方法,如果它很明显,我很抱歉,但我找不到它。
答案1
哦,好吧,看来split
Mac(也许是 BSD)上的实用程序缺少一个选项 :(
在 Linux 上,有-C
一个选项,可以让你指定每行有多少字节。或者简单地说 - 如果你传递 cat file | split -C 1000
,它将创建最多 1000 个字节的整行块,这通过初等数学让我可以轻松地实现我想要的。
答案2
我只想分裂按行数计数,这样将使得除最后一个文件之外的所有文件几乎相等。
export LINE_COUNT=100,000
cat $STREAM | split -l $LINE_COUNT
你可以用 $SIZE_OF_STREAM 除以 $NUMBER_OF_FILES_TO_PRODUCE 来计算,但只要设置行数,就可以使所有文件基本相等,除非你的行长度以非常非正常的方式分布。
我已经链接到在线文档,但是手册页随 OS X 一起提供,因此您可以看到那里的分割具有字节截止和行截止。
答案3
创建将输出 STREAM 的文件:
echo "1234\n5678" > xfile
现在将其分割
for i in $(seq 0..`wc -c xfile|awk '{print $1}'`); do let a=`expr $i \* 2`; dd if=xfile of=file$i bs=1 count=2 skip=$a; done
它将为您提供一个固定大小为 2 字节且名称为 file1、file2、file3.... 的文件日志。