Bash – обработка вывода по одной строке за раз

Я читал, что xargs хорош для обработки вывода команды по одной строке за раз (и это). У меня есть следующая строка в моем скрипте.

./gen-data | awk '{printf $2 " "; printf $1=$2=$3=""; gsub (" ", "", $0);if(length($0) == 0){ print "0000"} else{print $0}}' | xargs -t -n2 -P1 bash -c 'datatojson "$@"' _ 

Он производит правильный вывод, и в этом нет сомнений. Однако gen-data создает что-то вроде 1000 строк, и мне действительно хотелось бы, чтобы эта команда выполнялась после каждой строки, а не после 1000 строк (она явно останавливается регулярно, чтобы получить больше ввода).

  • Как изменить содержимое командной строки?
  • Windows: как установить драйвер из командной строки восстановления?
  • Как запустить приложение с аргументами командной строки в Mac OS
  • Chmod 777: как сделать все файлы «RWX»
  • Буквенное письмо с данным файлом в пакете окон
  • Закрыть программы из командной строки (Windows)
  • Вот как выглядят gen-data:

     candump $interface & while true; do while read p; do cansend $interface $(echo $p | awk 'NF>1{print $NF}'); done < <(shuf $indoc) done 

    ( cansend отправляет данные в интерфейс, и считывание candump считывается с этого интерфейса и выводит его на экран, но я ставлю это не слишком актуально). В любом случае, кажется, что candump непрерывно выводится на выходе, но когда я xargs его к awk и xargs , он становится фрагментированным. Это просто потому, что я использовал shuf ? Я бы подумал, что, поскольку он проходит через интерфейс и читается с другой стороны, он будет менее фрагментирован, чем предоставляет shuf.

  • Включить SSH на Mac в однопользовательском режиме
  • Что такое / usr / bin / [и как его использовать?
  • Как удалить файлы, превышающие определенную дату на linux
  • Сколько времени потребуется, чтобы сократить количество разделов на 44 ГБ до 10 ГБ
  • Для моего собственного DNS-сервера «dig ... @ ip-address» работает, но «dig ... @domainname» не
  • В Windows 7 есть ли строка командной строки, которая может запускать cmd в качестве администратора?
  • One Solution collect form web for “Bash – обработка вывода по одной строке за раз”

    Вы можете попробовать ту же команду, на этот раз используя несколько хаков, чтобы избежать буферизации :

     ./gen-data | gawk '{printf $2 " "; printf $1=$2=$3=""; gsub (" ", "", $0);if(length($0) == 0){ print "0000"} else{print $0}; fflush(stdout)}' | stdbuf -o0 xargs -t -n2 -P1 bash -c 'datatojson "$@"' _ 

    Имейте в виду изменение от awk до gawk и использования fflush . Вы также можете попробовать mawk -Winteractive . Также помните, что я добавил stdbuf -o0 перед xargs. Вы также можете попробовать последнее в начале с ./gen-data

    Давайте будем гением компьютера.