Учитывая правило «заменить второе поле, разделенное двоеточием, на new-text
», awk делает это довольно прямо -вперед:
awk -F':' 'BEGIN { OFS=FS } {$2="new-text"; print} ' < input > output
-F':'
указывает awk использовать двоеточие для разделения полей в каждой строке.
Раздел BEGIN
устанавливает разделитель полей вывода в текущий разделитель полей (двоеточие ), так что, когда мы повторно -напечатаем строку позже, awk объединяет поля вместе снова с двоеточиями.
Перед вторым разделом нет условного оператора, поэтому он выполняется для каждой строки; он выполняет фактическую работу по замене второго поля на new-text
, а затем печатает новую строку.
$ iwconfig wlan0 | awk -F'[=/]' 'tolower($0) ~ /quality/{print $2, $4, $6}' file
37 57 0
С GNU grep:
iwconfig wlan0 | grep -i quality | grep -oP '\d+(?=/)'
который выводит
37
57
0
Предполагая, что интересующие числа всегда идут до '/100', вы могли бы найти «некоторое число», за которым следует «/100», а затем обрезать все до «/»:
grep -o '[0-9][0-9]*\/100' your_file | cut -d/ -f1
Это дает результат:
37
57
0