Використання AWK для отримання другого стовпця


9

Я не можу отримати команду awk для отримання другого стовпця даних.

Код Баша:

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.


2
Навіщо зберігати його в змінній, якщо ви друкуєте її відразу? Просто використовуйте awk'sprintf
Сергій Колодяжний

Відповіді:


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

Зауважте, що змінне цитування не потрібне при виконанні завдань у оболонці

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.