Komandas, sintakse un piemēri
AWK komanda ir spēcīga metode teksta failu apstrādei vai analīzei, it īpaši datu failiem, kurus organizē līnijas (rindas) un kolonnas.
Vienkāršas awk komandas var palaist no komandrindas . Sarežģītāki uzdevumi jāraksta kā awk programmas (tā sauktie awk skripti) failā.
AVK komandas pamatformāts izskatās šādi:
awk 'modelis {action}' input-file 'izejas failsTas nozīmē: ņemt katru ievades faila rindu; ja rindā ir modelis, tiek piemērota darbība līnijai un uzrādīt iegūto rindu izejas failam. Ja modelis tiek izlaists, darbība tiek piemērota visām līnijām. Piemēram:
awk '{print $ 5}' table1.txt> output1.txtŠis paziņojums ņem vērā katras rindiņas 5. kolonnas elementu un raksta to kā izejas faila "output.txt" rindiņu. Mainīgais lielums "4 $" attiecas uz otro sleju. Tāpat varat piekļūt pirmajai, otrajai un trešai kolonnai ar $ 1, $ 2, $ 3 utt. Pēc noklusējuma tiek uzskatīts, ka kolonnas ir atdalītas ar atstarpēm vai cilnēm (tā saukto atstarpi). Tātad, ja ievades fails "table1.txt" satur šīs rindas:
1, Justin Timberlake, sadaļa 545, cena 7,30 $ 2, Taylor Swift, sadaļa 723, cena 7,90 $ 3, Mick Jagger, sadaļa 610, cena 7,90 $ 4, Lady Gaga, sadaļa 118, cena 7,30 $ 5, Johnny Cash, virsraksts 482, cena 6,50 $ 6, Elviss Preslijs, sadaļa 335, cena 7,30 $ 7, John Lennon, sadaļa 271, cena 7,90 $ 8, Michael Jackson, sadaļa 373, cena 5,50 $Pēc tam komanda uz izejas faila "output1.txt" uzraksta šādas rindiņas:
545, 723, 610, 118, 482, 335, 271, 373,Ja kolonnu atdalītājs ir kaut kas cits, nevis atstarpes vai cilnes, piemēram, komatu, jūs varat norādīt, ka paziņojumā awk ir norādīts šādi:
awk -F, '{print $ 3}' table1.txt> output1.txtTas atlasīs elementu no katras rindiņas 3 kolonnas, ja kolonnas tiek uzskatītas par atdalāmām ar komatu. Tādēļ produkcija šajā gadījumā būtu:
Sadaļa 545 Sadaļa 723 Sadaļa 610 Sadaļa 118 Sadaļa 482 Sadaļa 335 Sadaļa 271 Sadaļa 373Norāžu saraksts cirvijās iekavās ('{', '}') tiek saukts par bloku. Ja jūs izveidojat nosacījuma izteiksmi bloka priekšā, paziņojums iekšpusē blokā tiks izpildīts tikai tad, ja nosacījums ir taisnība.
awk '$ 7 == "\ $ 7,30" (drukāt 3 $) "table1.txtŠajā gadījumā nosacījums ir 7 $ == "\ $ 7,30", kas nozīmē, ka 7. slejā esošais elements ir vienāds ar 7,30 ASV dolāriem. Pirms dolāra zīmes ir vērsta atpakaļgala slīpsvītra, lai sistēma netiktu interpretējusi $ 7 kā mainīgo lielumu un tā vietā ņemtu dolāru zīmi burtiski.
Tātad šis awk paziņojums izdrukā elementu katras rindas trešajā ailē, kurai 7. slejā ir "7,30 $".
Jūs varat arī izmantot regulāras izteiksmes kā nosacījumu. Piemēram:
awk '/ 30 / {print $ 3}' table1.txtStringa starp abām slīpsvītrām ('/') ir regulārā izteiksme. Šajā gadījumā tas ir tikai virkne "30." Tas nozīmē, ka, ja rindā ir virkne "30", sistēma izdrukā elementu šīs līnijas trešajā kolonnā. Iepriekš minētajā piemērā produkcija būtu:
Timberlake, Gaga, Presley,Ja tabulas elementi ir skaitļi awk, tie var veikt aprēķinus, kā šajā piemērā:
awk '{print ($ 2 * $ 3) + $ 7}'Papildus mainīgajiem lielumiem, kas piekļūst pašreizējās rindas elementiem ($ 1, $ 2 utt.), Ir mainīgais $ 0, kas attiecas uz visu rindu (līniju) un NF mainīgo, kas atrodas lauku skaitam.
Varat arī definēt jaunus mainīgos, kā šajā piemērā.
awk '(summa = 0; par (col = 1; col <= NF; col ++) sum + = $ col; drukas summa; } 'Tas aprēķina un izdrukā visu elementu skaitu katrā rindā.
Awk izteicieni bieži apvieno ar sed komandām .