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 "[email protected]"' _ 

Он производит правильный вывод, и в этом нет сомнений. Однако 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.

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

 ./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 "[email protected]"' _ 

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

  • Как сделать разрешение на новый файл наследованием из родительского каталога?
  • Как использовать строки файла в качестве аргументов команды?
  • Создание имени строковой переменной из значения другой строки
  • Генератор случайных паролей: многие, в столбцах, в командной строке, в Linux
  • Как проверить текущее дисковое пространство, используемое моим Linux?
  • Scripting: что проще всего извлечь значение в теге XML-файла?
  • Что такое файл .bashrc?
  • Unix «$ @» в качестве параметра
  • Как gzip несколько файлов в один файл gz?
  • Разрешить определенное разрешение пользователя для чтения / записи моей папки
  • Vim: когда складной код позволяет оставить вкладки
  • Interesting Posts

    Как запустить проводник Windows с привилегиями другого пользователя домена?

    Почему double width = 50/110000; выход составляет 0,000000000000000?

    WebAPI StreamContent vs PushStreamContent

    В чем разница между статически типизированными и динамически типизированными языками?

    Как торрент-клиенты обходят брандмауэр маршрутизатора?

    Автозапуск нескольких сеансов экрана на сервере Ubuntu

    Действие страницы расширения Chrome, появившееся за пределами адресной строки

    Использование памяти JVM из-под контроля

    Получить полный список записей автозаполнения?

    Повторяющиеся ошибки множественного определения от включения одного и того же заголовка в нескольких cpps

    Laravel – Получить последнюю запись каждого типа UID

    Перемещение списка «Наиболее посещаемых» в Google Chrome?

    X11.app (на SnowLeopard) не запустится

    Извлечение файлов из поля Attachment в базе данных Access

    Существуют ли отдельные процессоры для серверов?

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