Use --pipe:
cat 2011.psv | parallel --pipe -l 50000000 ./carga_postgres.sh
Ele requer ./carga_postgres.sh para ler de stdin e não de um arquivo, e é lento para a versão GNU Parallel < 20130222.
Se você não precisa exatamente de 50000000 linhas, o --block é mais rápido:
cat 2011.psv | parallel --pipe --block 500M ./carga_postgres.sh
Isso vai passar pedaços de cerca de 500MB divididos em \ n.
Eu não sei o que ./carga_postgres.sh contém, mas meu palpite é que ele contém o psql com a senha do nome de usuário. Nesse caso, você pode querer usar o GNU SQL (que faz parte do GNU Parallel):
cat 2011.psv | parallel --pipe --block 500M sql pg://user:pass@host/db
A principal vantagem é que você não precisa salvar arquivos temporários, mas pode manter todos em memória / canais.
Se ./carga_postgres.sh não pode ler a partir de stdin, mas deve ler a partir de um arquivo, você pode salvá-lo em um arquivo:
cat 2011.psv | parallel --pipe --block 500M "cat > {#}; ./carga_postgres.sh {#}"
Os trabalhos grandes geralmente falham no meio do caminho. O GNU Parallel pode ajudá-lo, executando novamente os trabalhos com falha:
cat 2011.psv | parallel --pipe --block 500M --joblog my_log --resume-failed "cat > {#}; ./carga_postgres.sh {#}"
Se isso falhar, você poderá executar novamente o acima. Ele irá ignorar os blocos que já foram processados com sucesso.