我想把压缩后的csv文件拆分成多个较小的gzip文件,在行边界上拆分。
我正试着用一段时间的阅读线把一个bash脚本压缩成一段。该脚本写入一个命名管道,后台gzip进程正在该管道中重新压缩它。每读一个x字符,我就关闭fd并为下一次拆分重新启动一个新的gzip进程。
但是在这个场景中,带有while read line的脚本消耗了90%的cpu,因为这里的读取效率非常低(我知道它一次发出一个读取1个字符的系统调用)。
有没有想过要有效率地做这件事?我预计gzip将消耗大部分cpu。

最佳答案

使用split-l选项指定所需的行数。use--filteroption$FILE是用于输出到文件的名称拆分(必须用单引号引起来,以防止shell过早地展开:

zcat doc.gz | split -l 1000 --filter='gzip > $FILE.gz'

如果需要任何额外的处理,只需打开一个脚本,它将接受文件名作为参数并相应地处理标准输入,并使用该脚本而不是普通的gzip

关于linux - 有没有一种有效的方法来读取bash中的行输入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13767095/

10-16 18:09