awk - tai komanda turinti programavimo kalboms būdingų bruožų. Ši komanda atskiria failų eilutes, kuriose atrandamas vartotojo užkoduotas šablonas.
-F: - laukelio skyriklis, paprastai skyriklis yra tarpas. Skaitant passwd failą, jį pakeiskime į ":".
$0 - visų argumentų atvaizdavimas.
$1..$n - n argumento atvaizdavimas.
Rezervuoti kintamieji:
NR - Perskaitytų failo eilučių kiekis faile.
NF - Laukų skaičius einamojoje eilutėje.
exit - Programos nutraukimas.
$ awk -F: '{print $1}' /etc/passwd #Atspausdins visus passwd failo vartotojus ($1)
-F: - laukelio skyriklis, paprastai skyriklis yra tarpas. Skaitant passwd failą, jį pakeiskime į ":".
$0 - visų argumentų atvaizdavimas.
$1..$n - n argumento atvaizdavimas.
Rezervuoti kintamieji:
NR - Perskaitytų failo eilučių kiekis faile.
NF - Laukų skaičius einamojoje eilutėje.
exit - Programos nutraukimas.
$ awk -F: '{print $1}' /etc/passwd #Atspausdins visus passwd failo vartotojus ($1)
$ awk -F: '{print $1, $3}' /etc/passwd #Atspausdins 1, 3 dvitaškiu atskirtą žodį
$ awk -F : '$3 > 1000 {print $0}' /etc/passwd #Atspausdins tik tas eilutes, kurių vartojo id ($3) > 1000
Kaip atspausdinti eilutes tam tikru intervalu?
$ cat -n aaa | awk 'NR%2==1' #Pradeda, nuo 1 eilutės ir spausdinam, kas 2
Kaip gauti intarvalą tarp dviejų reikšmių?
$ awk -F : '($3 > 1000) && ($3 <= 1003) {print $0}' /etc/passwd #Atspausdins vartotojus, kurių id 1000 > x < 1003
Tuščių eilučių pašalinimas, kartu atspausdinant tam tikrą eilučių skaičių:
$ awk '{$2=$2};1 && FNR <= 5' file #Su && sujungiame komandas.
Argumentų reikšmių priskyrimas:
$ echo "vienas du trys atspausdintas tekstas" | awk '{$1=$2=$3="";print}' #Atspausdins tik " atspausdintas tekstas"
Scenarijai
Kaip rasti negaliojančius sistemos vartotojus?Vartotojų galiojimo laikas kontroliuojamas chage komandą. Galiojimo laikas saugomas /etc/shadow dokumente, nurodant dienų skaičių po epochos laiko pradžios.
TODAY=$(echo $(($(date --utc --date "$1" +%s)/86400))) #Dienos praėjusios po 1970 sausio 1 d iki šiandien
$ sudo gawk -F: '{if (($8 > 0) && ($TODAY > $8)) print $1}' /etc/shadow
Kaip atspausdinti savo ip adresą?
$ ip a s $(ip r s 0/0 | awk '{print $5;exit}') | awk '$1 ~ /inet$/ {print $2;exit}'
Prie kokių servisų esam prisijungę?:
$ ip a s $(ip r s 0/0 | awk '{print $5;exit}') | awk '$1 ~ /inet$/ {print $2;exit}'
Prie kokių servisų esam prisijungę?:
$ netstat -np | awk '{print $7}' | awk -F/ '{count[$2]++}END{for(j in count) print count[j],j}' | sort -nr