как прочитать значение из команды awk?

Похоже, что это правило является частью большого набора правил.

  • -t raw -I OUPUT:вставить это правило в начало цепочки OUTPUT таблицыraw
  • -j CT:если условия выполнены перейти к целиCT

теперь условия

  • -p udp:протокол должен быть udp
  • -m udp:используйте расширение udp-, необходимое для фильтрации портов udp -
  • --dport 69:применяется к датаграммам udp с портом назначения 69
  • --helper tftp:для отслеживания связанных дейтаграмм используйте ожидания дляtftp

ссылка:«помощники» на regit.org

1
13.06.2018, 11:46
2 ответа

Вы можете просто использоватьgrep:

 cells=$(grep -F "rx cells" "$co_result" | grep -oE "[0-9]+")

это извлечет число в вашу переменную с помощью:

grep -F "rx cells" $co_result:это извлечение строки, содержащейrx cells : 1707
grep -oE "[0-9]+":выводить только совпадение регулярного выражения, которое соответствует только числу :1707

Вы также можете использовать более изящную групповую замену sedдля извлечения значения, подобного этому:

cells=$(sed  -r -n 's/rx cells.*\W([0-9]+)/\1/p' "$co_result")
  • -r:включить расширенное регулярное выражение
  • -n:печатать только явную строку
  • 's///p' :s для замены, p для явного вывода строки, соответствующей шаблону.
  • rx cells.*\W([0-9]+)соответствуетrx cells.*\Wсоответствует любому символу до тех пор, пока словесный символ, отличный от -, и ([0 -9]+ )не захватят в группу одну или несколько цифр.
  • \1заменить вывод группой один, которая содержит n захваченных цифр.
1
28.04.2021, 23:45

Ваша подстановка команд излишне сложна.

Вместо:

cells=$( awk '/rx cells/ { print $NF }' <"$co_result" )
printf 'Var_value: %s\n' "$cells"

$NFбудет последним полем, разделенным пробелом -в строке, и оно печатается, если строка содержит строку rx cells.

Также убедитесь, что входной файл является текстовым файлом Unix, а не текстовым файлом DOS. Запустите dos2unixдля файла, чтобы преобразовать его в текстовый файл Unix.


Глядя на вашу команду:

grep -e 'cells' $co_result | cut -d: -f2 | awk '{print $1}'| awk 'NR%2{printf $0"";next;}1'

Первый:grep -e 'cells' $co_resultзавершится ошибкой, если $co_resultсодержит пробел, табуляцию, новую строку или любой другой специальный символ (, поскольку он не заключен в кавычки ).

Вывод команды

tx cells  : 468
rx cells  : 1707

Тогда:cut -d: -f2. Это выводит

 468
 1707

Тогда:awk '{print $1}'. Это выводит то же самое, что и выше, но с удаленными начальными пробелами

Тогда:awk 'NR%2{printf $0"";next;}1'.Это запутанный способ сделать paste -d' ' - -и вывести

468 1707

Позже echoвыведет

Var_value: 468 1707

Причина, по которой вы этого не видите, заключается в том, что ваш входной файл является текстовым файлом DOS и содержит символы возврата каретки в конце каждой строки. Поэтому курсор возвращается к началу строки после печати 468.

Используйте dos2unixво входном файле.

Откуда вы взяли 530, я не знаю.

2
28.04.2021, 23:45

Теги

Похожие вопросы