如何将pipe道中的文本分成N个相同大小的文件?

我想pipestreamsplit 。 我知道字节stream(非常大,来自networking)有多大,我想要分割创build大小相等的N个文件,而不用将线分成两半。 有没有可能做到这一点。 就像是:

 cat STREAM | split $SIZE_OF_STREAM $NUMBER_OF_FILES_TO_PRODUCE 

我找不到通过文档实现的方法,如果显而易见,我很抱歉,但是我找不到它。

哦,好像,Mac上的split工具(也许BSD)是一个选项短:(

在Linux上,有-C选项,它可以让你说每一行的块数是多less字节。 或者以更简单的方式说 – 如果你通过cat file | split -C 1000 cat file | split -C 1000 ,它将创build最多1000字节的整行,这与初等math给我一个简单的方法来实现我想要的块。

我只是简单地将行数分开 ,因为除了最后一行之外的所有文件几乎相等。

 export LINE_COUNT=100,000 cat $STREAM | split -l $LINE_COUNT 

你可以用$ SIZE_OF_STREAM除以$ NUMBER_OF_FILES_TO_PRODUCE来进行math计算,但是只要设置一个行数就可以让你有90%的path使所有文件基本相等,除非你的行长度是以非常规的方式分配的。

我已经链接到在线文档,但手册页与OS X一起发货,所以你可以看到,分割有一个字节截断以及截断线。

创build将出来的文件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 ….