Awk’s built-in variables include the field variables—$1, $2, $3, and so on ($0 is the entire line) — that break a line of text into individual words or pieces called fields.

NR: NR command keeps a current count of the number of input records. Remember that records are usually lines. Awk command performs the pattern/action statements once for each record in a file.
NF: NF command keeps a count of the number of fields within the current input record.
FS: FS command contains the field separator character which is used to divide fields on the input line. The default is “white space”, meaning space and tab characters. FS can be reassigned to another character (typically in BEGIN) to change the field separator.
RS: RS command stores the current record separator character. Since, by default, an input line is the input record, the default record separator character is a newline.
OFS: OFS command stores the output field separator, which separates the fields when Awk prints them. The default is a blank space. Whenever print has several parameters separated with commas, it will print the value of OFS in between each parameter.
ORS: ORS command stores the output record separator, which separates the output lines when Awk prints them. The default is a newline character. print automatically outputs the contents of ORS at the end of whatever it is given to print.

NR číslo aktuálně zpracovávaného záznamu // The current record's number.
NF počet položek aktuálního záznamu // The number of fields in the record.
NF <===> Number of fields - representuje podleni sloupec, v podstate pokud chcem JENOM ten posledni sloupec - pozor pokud nektery z radku nema stejny pocty sloupcu, VZDY NF zobrazi POSLEDNI sloupec daneho radku!
FS oddělovač poli // Field separator.
RS oddělovač záznamů // Record separator.
OFS nastaveni vystupniho znaku mezi jednotlivymi poli, pokud chci oddelit tabelatoroma zadam OFS="\t" // Output field separator.
ORS Output record separator.
FILENAME jméno aktuálního vstupního souboru (v případě standardního vstupu "-" // The name of the presently processed input file.


PRIKLADY

## awk '$1 >= "1" && $1 < "T" && $1 !~ /^D.*k$/ {print $0}' priklad4 >>>>>>>
## Jak vidno výrazu vyhověl rovněž "Dodatečný řádek", protože jeho první položka, řetězec "Dodatečný" sice začíná na "D", ale nekončí na "k"
## $0 representuje celou radku textu

 

awk '/delnik/ {print}' <===> vypise radky kde je pouze slovo delnik
awk '/delnik/' <===> taktez vypise radky kde JE pouze slovo delnik
awk '/ni/ {print $0}' dataawk 'NR>2 {print $NF}'pokud je v textu (radce) slovo "ni" tak vypis tento radek (print $0 znamena "vytiskni tento radek")

awk -F'[<>]' '{print $2}' SOUBOR <===> vypise pouze obsah mezi znaky < > v SOUBORU

awk -F'[()]' '{print $2}' <===> vypíše pouze údaje které jsou mezi dvěma závorkama ()

awk -F, '{print $NF}' priklad02 <===> vypise pouze posledni udaj z radku a to i kdyz ma udaj mezery mezi sebou

awk '!/delnik/' <===> vypise radky kde NENI slovo delnik

awk '!/ni/ {print $0}' data <===> pokud je v textu (radce) slovo "ni" tak NEVYPISUJ tento radek

awk '{print $1}' <===> vypise prvni sloupec z tabulkoveho seznamu oddeleneho mezerou
awk '{print $1,$4}' <===> vypise pouze sloupce 1 a 4 (jmeno + plat)
awk '{print $1,$NF}' <===> vypise pouze sloupec 1 a posledni sloupec
awk 'NR>2 {print $NF}' <===> vypise posledni hodnotu v kazde radce

awk '{print $1}' | cut -c4-8 | sort -V | uniq <===> vybere pouze pismena od pozice 4 az 8 z prvniho sloupce, seradi je a odebere duplicitni

awk '{print NR "- " $1 }' <===> vypise pouze prvni sloupec a pred nej prida pomlcku a cislo radku

awk 'length($0) > 10' <===> vypise pouze ty radky, ktere maji vice jak 10 znaku

echo "12 23 11" | awk '{split($0,a); print a[3]; print a[2]; print a[1]}' <===> rozdeli radek na jednotlive sloupce a vypise je POD SEBE

echo "12:23:11" | awk '{split($0,a,":"); print a[3]; print a[2]; print a[1]}' <===> rozdeli radek na jednotlive sekce podle znaku zavorka (:) a kazdou cas napise na novy radek

awk '{print NR,$0}' employee.txt <===> ocisluje pred kazdou radku cislo radku
awk 'NR==3, NR==5 {print NR,$0}' priklad01 <===> vypise pouze radky 3 az 5

awk '{print $NF}' <===> vypise POSLEDNI sloupec z tabulkoveho seznamu (oddeleneho mezerou)

awk '$1 == "#" {print $2}' <===> vypise jen radku ktere zacinaji/nebo obsahuji symbol # ale z nich pouze druhy sloupec

cat /etc/passwd | awk -F: '{print $1 " " $7}' <===> Chceme třeba vědět, který uživatel používá jaký shell

awk '{print "'\''"$0}' pokus | awk '{print $0"'\'',"}' > pokus-modified <===> vytvořím nový soubor s názvem pokus-modified, který bude mít na začátku každé řádky jednoduchou uvozovku a na konci jednoduchou uvozovku a čárku.

awk {'print $3, $1, $2'} FS=/ | sort -n <===> nahradi delice (cisla oddelena lomitkama) oddeli jednotlive sloupce mezerou a seradi je od nejvetsiho po nejmensi

awk -F "/" '{print $3, $1, $2}' | sort -V <===> nahradi delice (cisla oddelena lomitkama) oddeli jednotlive sloupce mezerou a seradi je od nejvetsiho po nejmensi

awk '{print $1}' FS='\t' input.txt <===> vykucha pouze prvni ze sloupcu (pouze pokud jsou hodnoty oddelene tabulatorem)

awk -F: '{print $1}' /etc/passwd <===> vypise pouze prvni sloupec - definuje oddelovace jako :

awk -F"," 'NR!=1{print $1,$3}' OFS="," priklad2 <===> OFS is another awk special variable. Just like how FS is used to separate the input fields, OFS (Output field separator) is used to separate the output fields.

nawk -F/ '{print $1$3}' priklad3 | tr -d \" <===> ??

awk '{$2=$2};1' priklad06 <===> odstrani vice mezer v textu

awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "Zadne Duplikaty"}}' priklad08 <===> porovna druhy a treti sloupec a vypise u sloupcu textu kde NENI duplicitni hodnota vysledek "Zadne Duplikaty"

awk -F"," '{if ($2!=$3) {print $1, $2, $3} else {print $1, "Duplikaty"}}' priklad08 <===> porovna druhy a treti sloupec a vypise u sloupcu textu kde JE duplicitni hodnota vysledek "Duplikaty"

awk '{if ($4!=0 && $8=="WPA2") {print $0}}' data35 <===> vypise pouze ty radku kde NENI ve 4.sloupci NULA a ZAROVEN v 8.sloupci je udaj WPA2

awk '{ if (length($0) > max) max = length($0) } END { print max }' data <===> vypise delku (pocet pismen) NEJDELSIHO radku
awk 'NF > 0' data <===> vypis kazdy radek ktery ma alespon jeden sloupec tj. vypusti take ty radky, kde nic neni
awk 'NF > 4' data <===> vypis jen ten radek, ktery ma alespon ctyri sloupce

id | sed 's/,/\n/g' | awk -F '[(|)]' '{print $2}' <===> z celeho radku nahradi carky novou radkou a vykucha vse uvnitr zavorek

grep input file | awk '{print}' ORS=', ' <===> pokud je na kazdem radku neco, tak to nahaze za sebe a oddeli carkou

awk -F\; '{for(i=1;i<=NF;i++)r[i]=r[i] sep $i;sep=FS}END{for(i=1;i<=NF;i++)print r[i]}' priklad09 <===> prevede tabulka radku na tabulku sloupcu

awk '{ for (i=1; i<=NF; i++) if ($i ~ /ai/) print $i }' <===> hledá část slova (v tomto případě ai) a pokud ho ve slově ajde celé slovo vypíše


několik způsobů smazání prázdných řádků

awk /./ <===> odstraní prázdné řádky
awk 'NF' <===> odstraní prázdné řádky
awk 'length' <===> odstraní prázdné řádky
awk '/^[ \t]*$/ {next;} {print}' <===> odstraní prázdné řádky
awk '!/^[ \t]*$/' <===> odstraní prázdné řádky


PRIKLADY

$ cat DATA
abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod

$ awk -F, '{print substr($1, 1, length($1)-4), $3}' DATA
abcdefghi xyz
riosadsef eis
baifafsag eod