Awk

Kā lietot AWK operētājsistēmā Linux

Kā lietot AWK operētājsistēmā Linux

Pakalpojumi, ko Linux piedāvā, bieži ievēro UNIX dizaina filozofiju. Jebkuram rīkam jābūt mazam, I / O ievadīšanai izmantojiet vienkāršu tekstu un jādarbojas modulāri. Pateicoties mantojumam, mums ir dažas no labākajām teksta apstrādes funkcijām, izmantojot tādus rīkus kā sed un awk.

Operētājsistēmā Linux awk rīks ir iepriekš instalēts visos Linux distros. Pati AWK ir programmēšanas valoda. Rīks AWK ir tikai AWK programmēšanas valodas tulks. Šajā rokasgrāmatā pārbaudiet, kā izmantot AWK operētājsistēmā Linux.

AWK izmantošana

AWK rīks ir visnoderīgākais, ja teksti ir sakārtoti paredzamā formātā. Tas ir diezgan labi parsēt un manipulēt ar tabulas datiem. Tas darbojas pa rindām pa visu teksta failu.

Pēc noklusējuma awk ir atstarpes (atstarpes, cilnes utt.).) lauku atdalīšanai. Par laimi, daudzi konfigurācijas faili Linux seko šim modelim.

Pamata sintakse

Šādi izskatās awk komandu struktūra.

$ awk '// ; ;

Komandas daļas ir diezgan pašsaprotamas. Awk var darboties bez meklēšanas vai darbības daļas. Ja nekas nav norādīts, noklusējuma darbība mačā būs tikai drukāšana. Būtībā awk izdrukās visas failā atrastās spēles.

Ja meklēšanas parametrs nav norādīts, tad awk veiks norādītās darbības katrā faila rindā.

Ja tiek dotas abas daļas, tad awk izmantos modeli, lai noteiktu, vai pašreizējā līnija to atspoguļo. Ja atbilst, tad awk veic norādīto darbību.

Ņemiet vērā, ka awk var strādāt arī ar novirzītiem tekstiem. To var panākt, ievadot komandas saturu awk rīkoties. Uzziniet vairāk par Linux pipe komandu.

Demonstrācijas nolūkos šeit ir teksta faila paraugs. Tas satur 10 rindas, 2 vārdus katrā rindā.

$ kaķu paraugs.txt

Regulāra izteiksme

Viena no galvenajām iezīmēm, kas padara awk par spēcīgu rīku, ir regulārās izteiksmes atbalsts (īsi sakot ar izteiksmi). Regulāra izteiksme ir virkne, kas attēlo noteiktu rakstzīmju modeli.

Šeit ir saraksts ar dažām visbiežāk sastopamajām regulārās izteiksmes sintaksēm. Šīs regex sintakses ir raksturīgas ne tikai awk. Tās ir gandrīz universālas regex sintakses, tāpēc to apgūšana palīdzēs arī citās lietotnēs / programmēšanā, kas ietver regulāru izteiksmi.

  • Pamata rakstzīmes: Visas burtciparu rakstzīmes pasvītro (_) utt.
    • Rakstzīmju kopa: lai viss būtu vieglāk, regex ir rakstzīmju grupas. Piemēram, lielie burti (A-Z), mazie burti (a-z) un cipari (0–9).
  • Meta rakstzīmes: Tās ir rakstzīmes, kas izskaidro dažādus veidus, kā paplašināt parastās rakstzīmes.
    • Periods (.): Jebkura rakstzīmju atbilstība pozīcijā ir derīga (izņemot jaunu rindu).
    • Zvaigznīte (*): Ir spēkā nulles vai vairākas tiešā rakstura esamības pirms tā.
    • Kronšteins ([]): Spēle ir derīga, ja pozīcijā ir saskaņota kāda no kronšteina rakstzīmēm. To var kombinēt ar rakstzīmju kopām.
    • Piezīme (^): Mačam būs jābūt līnijas sākumā.
    • Dolārs ($): Mačam būs jābūt rindas galā.
    • Atpakaļ slīpsvītra (\): Ja kāds meta raksturs ir jāizmanto tiešā nozīmē.

Teksta drukāšana

Lai izdrukātu visu teksta faila saturu, izmantojiet komandu drukāt. Meklēšanas modeļa gadījumā modelis nav definēts. Tātad, awk izdrukā visas līnijas.

$ awk 'print' paraugs.txt

Šeit “print” ir AWK komanda, kas izdrukā ievades saturu.

Stīgu meklēšana

AWK var veikt pamata teksta meklēšanu dotajā tekstā. Šablona sadaļā tam ir jāatrod teksts.

Šajā komandā awk visās faila parauga rindās meklēs tekstu “ātri”.txt.

$ awk '/ quick /' paraugs.txt

Tagad izmantosim dažus regulārus izteicienus, lai precīzāk pielāgotu meklēšanu. Šī komanda izdrukās visas līnijas, kuru sākumā ir “brūna”.

$ awk '/ ^ brown /' paraugs.txt

Kā būtu atrast kaut ko rindas beigās? Šī komanda izdrukās visas līnijas, kuru beigās ir “ātri”.

$ awk '/ quick $ /' paraugs.txt

Wild card modelis

Nākamais piemērs parādīs caret lietojumu (.). Šeit pirms rakstzīmes “e” var būt jebkuras divas rakstzīmes.

$ awk '/… e /' paraugs.txt

Wild card modelis (izmantojot zvaigznīti)

Ko darīt, ja atrašanās vietā var būt jebkurš rakstzīmju skaits? Lai saskaņotu jebkuru iespējamo rakstzīmi attiecīgajā vietā, izmantojiet zvaigznīti (*). Šeit AWK saskaņos visas rindiņas, kurās pēc “the” ir jebkāds rakstzīmju daudzums.

$ awk '/ the * /' paraugs.txt

Kronšteina izteiksme

Šis piemērs parādīs, kā izmantot iekavas izteiksmi. Kronšteina izteiksme norāda, ka atrašanās vieta ir derīga, ja tā sakrīt ar iekavās ietverto rakstzīmju kopu. Piemēram, šāda komanda “The” un “Tee” sakritīs kā derīgas spēles.

$ awk '/ T [he] e /' paraugs.txt

Regulārajā izteiksmē ir dažas iepriekš definētas rakstzīmju kopas. Piemēram, visu lielo burtu kopa ir apzīmēta kā “A-Z”. Šajā komandā awk sakritīs ar visiem vārdiem, kas satur lielo burtu.

$ awk '/ [A-Z] /' paraugs.txt

Apskatiet šādu rakstzīmju kopu ar iekavu izteiksmi izmantošanu.

  • [0-9]: norāda vienu ciparu
  • [a-z]: norāda vienu mazo burtu
  • [A-Z]: norāda vienu lielo burtu
  • [a-zA-z]: norāda vienu burtu
  • [a-zA-z 0-9]: norāda vienu rakstzīmi vai ciparu.

Awk iepriekš definētie mainīgie

AWK nāk ar virkni iepriekš definētu un automātisku mainīgo. Šie mainīgie var atvieglot programmu un skriptu rakstīšanu ar AWK.

Šeit ir daži no visbiežāk sastopamajiem AWK mainīgajiem, ar kuriem jūs sastopaties.

  • FAILA NOSAUKUMS: Pašreizējā ievades faila faila nosaukums.
  • RS: Ierakstu atdalītājs. AWK rakstura dēļ tas apstrādā datus vienā ierakstā vienlaikus. Šeit šis mainīgais norāda norobežotāju, kas izmantots datu plūsmas sadalīšanai ierakstos. Pēc noklusējuma šī vērtība ir jaunās līnijas raksturs.
  • NR: Pašreizējā ievades ieraksta numurs. Ja RS vērtība ir iestatīta uz noklusējumu, šī vērtība norāda pašreizējo ievades līnijas numuru.
  • FS / OFS: Raksturs (-i), kas tiek izmantots (-i) kā lauku atdalītājs. Pēc izlasīšanas AWK ierakstu sadala dažādos laukos. Atdalītāju nosaka pēc FS vērtības. Drukājot, AWK atkal pievienojas visiem laukiem. Tomēr šobrīd AWK FS atdalītāja vietā izmanto OFS atdalītāju. Parasti gan FS, gan OFS ir vienādi, bet nav obligāti.
  • NF: Pašreizējā ieraksta lauku skaits. Ja tiek izmantota noklusējuma vērtība “atstarpe”, tā sakritīs ar vārdu skaitu pašreizējā ierakstā.
  • ORS: Izejas datu ierakstu atdalītājs. Noklusējuma vērtība ir jaunās līnijas rakstzīme.

Pārbaudīsim tos darbībā. Šī komanda izmantos mainīgo NR, lai drukātu 2. rindiņu līdz 4. rindai no parauga.txt. AWK atbalsta arī loģiskos operatorus, piemēram, loģiskos un (&&).

$ awk 'NR> 1 && NR < 5' sample.txt

Lai piešķirtu noteiktu vērtību AWK mainīgajam, izmantojiet šādu struktūru.

$ awk '// ; ; =,

Piemēram, lai noņemtu visas tukšās rindas no ievades faila, mainiet RS vērtību būtībā uz neko. Tas ir triks, kas izmanto neskaidru POSIX kārtulu. Tas norāda, ka, ja RS vērtība ir tukša virkne, tad ierakstus atdala secība, kas sastāv no jaunas rindas ar vienu vai vairākām tukšām rindām. Programmā POSIX tukša rinda bez satura ir pilnīgi tukša. Tomēr, ja rindā ir atstarpes, tā netiek uzskatīta par tukšu.

$ awk 'print' RS = "paraugs.txt

Papildu resursi

AWK ir spēcīgs rīks ar daudzām funkcijām. Kaut arī šī rokasgrāmata aptver daudzus no tiem, tas joprojām ir tikai pamati. AWK apgūšana prasīs vairāk nekā tikai to. Šai rokasgrāmatai vajadzētu būt jaukam rīka ievadam.

Ja jūs patiešām vēlaties apgūt rīku, šeit ir daži papildu resursi, kas jums jāpārbauda.

  • Apgrieziet atstarpi
  • Nosacījuma paziņojuma izmantošana
  • Izdrukājiet kolonnu diapazonu
  • Regex ar AWK
  • 20 AWK piemēri

Internets ir diezgan laba vieta, kur kaut ko iemācīties. Ļoti pieredzējušiem lietotājiem ir daudz awesome konsultāciju par AWK pamatiem.

Pēdējā doma

Cerams, ka šī rokasgrāmata palīdzēja labi izprast AWK pamatus. Lai gan tas var aizņemt kādu laiku, AWK apgūšana ir ārkārtīgi izdevīga attiecībā uz tās piešķirto spēku.

Laimīgu skaitļošanu!

Kā instalēt un spēlēt Doom uz Linux
Ievads liktenī Doom sērija radās 90. gados pēc sākotnējā Doom izlaišanas. Tas bija tūlītējs hīts, un kopš tā laika spēļu sērija ir saņēmusi daudzas ba...
Vulkan Linux lietotājiem
Ar katru jauno grafisko karšu paaudzi mēs redzam, kā spēļu izstrādātāji pārspēj grafiskās uzticamības robežas un tuvojas fotoreālismam. Neskatoties uz...
OpenTTD vs Simutrans
Transporta simulācijas izveide var būt jautra, relaksējoša un ārkārtīgi vilinoša. Tāpēc jums jāpārliecinās, ka izmēģināt pēc iespējas vairāk spēļu, la...