Я, может казаться, не заставляю команду 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
.
Необходимо использовать одинарные кавычки для awk тела программы, таким образом, переменные awk не расширены оболочкой. Вот то, как необходимо передать переменную оболочки в awk:
filter_data=$( awk -v re="$filter:" '$0 ~ re {print $2}' scanresults_temp.txt )
Альтернативный путь состоит в том, чтобы позволить оболочке поместить переменную в awk
s среда через продолжающееся (временное) присвоение:
re=$filter awk '$0 ~ ENVIRON["re"] {print $2}' input.txt
Обратите внимание, что переменное заключение в кавычки не необходимо при выполнении присвоений в оболочке