Используя AWK для получения второго столбца

Я, может казаться, не заставляю команду awk получать второй столбец данных.

Код Bash:

filter_data=$(awk "{if(/$filter:/) print $2}" < scanresults_temp.txt)

printf  "$filter_data \n"

Переменная $filter является или значением Загрузки или Загрузкой, которая передается в сценарий оболочки. Таким образом, awk использует термин Загрузка или Загрузка для поиска надлежащей строки.

Содержание файла:

Testing download speed................................................................................
Download: 51.13 Mbit/s
Testing upload speed................................................................................................
Upload: 57.38 Mbit/s

Я пытаюсь еще получить просто числа и ничто, исключая, 51.13 и 57.38.

9
задан 12 September 2018 в 13:04

2 ответа

Необходимо использовать одинарные кавычки для awk тела программы, таким образом, переменные awk не расширены оболочкой. Вот то, как необходимо передать переменную оболочки в awk:

filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )
13
ответ дан 23 November 2019 в 04:49

Альтернативный путь состоит в том, чтобы позволить оболочке поместить переменную в awks среда через продолжающееся (временное) присвоение:

re=$filter  awk  '$0 ~ ENVIRON["re"] {print $2}'  input.txt

Обратите внимание, что переменное заключение в кавычки не необходимо при выполнении присвоений в оболочке

7
ответ дан 23 November 2019 в 04:49

Другие вопросы по тегам:

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