Eu normalmente escolho a segunda opção (canaliza todo o caminho) a menos que uma das saídas intermediárias seja útil para outra tarefa. Por exemplo, se após executar o Foo em 50k, você quiser executar o Bar nos mesmos trabalhos, seria útil ter /tmp/jobs.csv
disponível.
O uso de pipes por todo o caminho dá ao sistema a capacidade de esquecer os dados o mais cedo possível, portanto, é um uso mais eficiente da memória. Ele também ignora as pilhas VFS e tmpfs e, portanto, usa menos CPU. O desempenho geral da cadeia também é mais rápido, porque você não precisa esperar que uma etapa seja concluída antes de iniciar a próxima etapa (exceto se o programa específico exigir).
A propósito, no seu exemplo, o maior usuário de memória seria o estágio sort
, porque ele precisa manter todo o conteúdo de jobs.csv
na memória para classificá-lo. Você pode torná-lo mais eficiente melhorando o que criar jobs.csv
, para que você não precise mais de sort -u
.