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 строк (она явно останавливается регулярно, чтобы получить больше ввода).

Вот как выглядят 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.

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

  • Изучение основ Linux / Unix
  • Как восстановить удаленный файл в Mac?
  • Перенаправление команд командной оболочки в другую консольную оболочку
  • Сохраните программу, запущенную после закрытия консоли, после запуска программы
  • Генератор случайных паролей: многие, в столбцах, в командной строке, в Linux
  • Лучшая практика для псевдонима команды rm и обеспечения ее безопасности
  • Каков рекомендуемый каталог для хранения содержимого веб-сайта?
  • Когда rm удаляет открытые файлы?
  • Легкий способ индексирования STDOUT (форматировать текст в столбцах)?
  • Вызов сценария с ./bla.sh vs. bla.sh
  • Можно ли «мгновенно» создавать произвольные файлы?
  • Bash - каталоги, заканчивающиеся на. И пробелы не могут быть удалены
  • Interesting Posts

    HDDErase.exe не подбирает диски для очистки

    Что эквивалентно Linux ~ ~ (тильда) Linux в Windows?

    Могу ли я отключить диалоговое окно «Неверные ответы страницы» Chrome?

    Показать файлы и папки Сортировка по имени NOT Folders Сначала файлы

    Как изменить поля печати по умолчанию для Google Chrome

    Самый простой способ использования внутреннего жесткого диска> 2 ТБ в Windows XP 32-бит?

    Как отключить Windows 8?

    Проводник Windows сбой при каждом открытии панели управления

    Странная проблема с памятью при загрузке изображения в объект Bitmap

    Есть ли горячая клавиша Windows или ярлык для переключения на определенный экран?

    Автоматическая синхронизация времени Windows чаще, чем по умолчанию.

    Получение «низкого уровня ошибок памяти» в Windows 7 64-бит с 8 ГБ ОЗУ

    Как добавить публичные (внешние) IP-адреса в мою личную сеть (контроллер домена Windows)

    Перемещение / выключение устаревшей панели значков слева внизу в GNOME 3.16

    Один локальный хост на двух системах

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