goj*_*omo 2 linux bash xargs gnu-coreutils
我有一个数据导入脚本,它读取行并将它们添加到数据库,到目前为止一直很好.不幸的是,脚本(或其运行时或数据库库或其他)中的某些东西是内存泄漏,因此大型导入使用单调增加的主内存,导致交换缓慢,然后内存耗尽的进程死亡.将导入分为多次运行是一种解决方法; 我一直这样做,split然后在每个部分上执行导入脚本的循环执行.
但我宁愿跳过分割文件,这感觉它应该是一个单行.事实上,似乎应该存在一个等价于xargs将行传递给stdin上的指定命令,而不是作为参数.如果这个假设命令是xlines,那么我希望以下内容为myimportgiantfile.txt中每批最多50,000行运行脚本:
cat giantfile.txt | xlines -L 50000 myimport
Run Code Online (Sandbox Code Playgroud)
我是否xlines在某个其他名称下缺少类似的功能,或隐藏在其他命令的选项中?或者可以xlines用几行BASH脚本完成?
使用GNU Parallel - 可在此处获得.
您将需要该--pipe选项以及--block选项(它采用字节大小,而不是行数).
有点像:
cat giantfile.txt | parallel -j 8 --pipe --block 4000000 myimport
Run Code Online (Sandbox Code Playgroud)
(那是选择50,000行的块大小*80字节= 4000000,4m这里也可以缩写.)
如果您不希望作业实际并行运行,请更改8为1.或者,你可以完全放弃它,它将为每个CPU核心运行一个作业.
您也可以cat通过运行来避免
parallel ... < giantfile.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
978 次 |
| 最近记录: |