Безопасно ли направлять вывод GNU параллельно одному файлу или каналу? - PullRequest
0 голосов
/ 15 мая 2018

С конструкцией, похожей на

find . -type f -name '*log' \
| parallel grep 'somestuff'    
| moreComplexLineRearrangementScript
| sort

Мне интересно, есть ли риск того, что moreComplexLineRearrangementScript увидит искаженные строки из-за того, что несколько экземпляров grep записывают в один канал без синхронизации буфера.

  1. Может ли это быть проблемой для наивного использования grep, как указано выше, или я могу полагаться на тот факт, что реализация grep записывает строки всегда с помощью flush ()?
  2. Если это не grep,может ли быть какое-то волшебство в parallel, которое выполняет flush ()?
  3. Есть ли способ использовать parallel, который гарантирует сохранение линий неповрежденными, кроме перенаправления вывода каждого параллельного процесса наотдельный файл и потом оттуда идти?

1 Ответ

0 голосов
/ 15 мая 2018

По умолчанию GNU Parallel буферизует вывод по заданию, поэтому выходные данные из разных заданий не все перепутаны, то есть:

parallel --group

Если вы хотите GNUПараллельно , чтобы делать вывод по очереди, возможно, смешивая вывод из разных заданий, но всегда в целых строках, используйте:

parallel --line-buffer

Если вам действительно нравится ваш вывод, чрезвычайно высокий, и всеперепутал даже среднюю линию, используйте:

parallel --ungroup
...