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

9

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

Код Bash:

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

printf  "$filter_data \n"

Переменная $ filter - это либо значение Download, либо Upload, которое передается в сценарий оболочки. Так что awk использует термин «Download» или «Upload» для поиска нужной строки.

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

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

Я пытаюсь получить только цифры, а не что-нибудь еще, например, 51.13и 57.38.

Влад
источник
2
Зачем сохранять его в переменной, если вы печатаете его сразу? Просто используйте awk«Sprintf
Sergiy Kolodyazhnyy

Ответы:

13

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

filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )
Гленн Джекман
источник
7

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

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

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

Сергей Колодяжный
источник