AWK или SED, получение значений из строки

Учитывая правило «заменить второе поле, разделенное двоеточием, на new-text», awk делает это довольно прямо -вперед:

awk -F':' 'BEGIN { OFS=FS } {$2="new-text"; print} ' < input > output

-F':'указывает awk использовать двоеточие для разделения полей в каждой строке.

Раздел BEGINустанавливает разделитель полей вывода в текущий разделитель полей (двоеточие ), так что, когда мы повторно -напечатаем строку позже, awk объединяет поля вместе снова с двоеточиями.

Перед вторым разделом нет условного оператора, поэтому он выполняется для каждой строки; он выполняет фактическую работу по замене второго поля на new-text, а затем печатает новую строку.

1
03.06.2021, 00:59
3 ответа
$ iwconfig wlan0 | awk -F'[=/]' 'tolower($0) ~ /quality/{print $2, $4, $6}' file
37 57 0
2
28.07.2021, 11:27

С GNU grep:

iwconfig wlan0 | grep -i quality | grep -oP '\d+(?=/)'

который выводит

37
57
0
1
28.07.2021, 11:27

Предполагая, что интересующие числа всегда идут до '/100', вы могли бы найти «некоторое число», за которым следует «/100», а затем обрезать все до «/»:

grep -o '[0-9][0-9]*\/100' your_file | cut -d/ -f1

Это дает результат:

37
57
0
1
28.07.2021, 11:27

Теги

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