Wiki

Clone wiki

configs / linux / tools / awk

awk

cols

отображать не все столбцы

awk ' {print $1,$3} '

if

Показывает только зомбанутые процессы

ps aux | awk '{if ($8 == "Z") print $0;}'
Можно проверять поле на величину
awk '$3>10'
awk '$3>10 {print}' # равнозначно
можно даже по регекспу, причем из определенного филда (что сложно сделать грепом)
awk '/^test/'
awk '$2~/^3/'
также можно применять несколько условий с группировкой оных
awk '($7=="session" && $8=="opened") || $11!="user" '

if else

Добавляем префикс перед всеми шестисимвольными строками, остальные выводим как есть.

awk '{if ($1~/^.{6}$/) print "prefix_"$1; else print $1;}'

grep

Можно обойтись без грепа

ps aux | awk '/apache/ {if ($8 == "S") print $0;}'

sum

Можно получить сумму поступающих данных

awk '/Hosts/ {sum += $1;} END { print sum }'
А еще можно с промежуточными результатами для каждой строки
awk '{sum += $1; print $0,sum} END { print sum }'
А можно с группировкой по филду
awk '{arr[$1]+=$2} END {for (i in arr) {print i,arr[i]}}'

ссылки

sed+awk
awk examples

Updated