使用--pipe:
cat 2011.psv | parallel --pipe -l 50000000 ./carga_postgres.sh
它需要./carga_postgres.sh从stdin中读取,而不是从文件中读取,并且对于GNU Parallel版本<20130222而言很慢。
如果不需要50,000,000行,则--block更快:
cat 2011.psv | parallel --pipe --block 500M ./carga_postgres.sh
这将传递\ n上大约500MB的块。
我不知道./carga_postgres.sh包含什么,但是我猜它包含带有用户名密码的psql。在这种情况下,您可能要使用GNU SQL(它是GNU Parallel的一部分):
cat 2011.psv | parallel --pipe --block 500M sql pg://user:pass@host/db
主要优点是您无需保存临时文件,但可以将所有文件保留在内存/管道中。
如果./carga_postgres.sh无法从stdin读取,但必须从文件读取,则可以将其保存到文件中:
cat 2011.psv | parallel --pipe --block 500M "cat > {#}; ./carga_postgres.sh {#}"
大型工作通常会失败一半。GNU Parallel可以通过重新运行失败的作业来帮助您:
cat 2011.psv | parallel --pipe --block 500M --joblog my_log --resume-failed "cat > {#}; ./carga_postgres.sh {#}"
如果失败,则可以重新运行上面的命令。它将跳过已经成功处理的块。