- Nuskaitykite failus eilute po eilutės.
- Padalinkite kiekvieną eilutę į laukus / stulpelius.
- Nurodykite modelius ir palyginkite failo eilutes su tais modeliais
- Atlikite įvairius veiksmus linijose, kurios atitinka tam tikrą modelį
Šiame straipsnyje paaiškinsime pagrindinį komandos „awk“ naudojimą ir tai, kaip ją galima naudoti norint padalyti eilučių failą. Šio straipsnio pavyzdžius mes atlikome „Debian 10 Buster“ sistemoje, tačiau juos galima lengvai pakartoti daugumoje „Linux“ distributorių.
Failo pavyzdys, kurį naudosime
Eilučių failas, kurį naudosime norėdami parodyti komandos awk naudojimą, yra toks:
Tai rodo kiekvienas failo pavyzdžio stulpelis:
- Pirmame stulpelyje nurodomi mokyklos darbuotojų / mokytojų vardai
- Antrame stulpelyje pateikiamas darbuotojo dėstomas dalykas
- Trečiame stulpelyje nurodoma, ar darbuotojas yra profesorius, ar docentas
- Ketvirtame stulpelyje yra darbuotojo darbo užmokestis
1 pavyzdys: naudokite „Awk“, kad išspausdintumėte visas failo eilutes
Kiekvienos nurodytos bylos eilutės spausdinimas yra numatytasis komandos awk elgesys. Šioje komandos awk sintaksėje nenurodome jokio modelio, kurį turėtų spausdinti awk, todėl komanda turėtų taikyti „spausdinimo“ veiksmą visoms failo eilutėms.
Sintaksė:
$ awk 'print' failo pavadinimas.txtPavyzdys:
Šiame pavyzdyje liepiu komandai awk atspausdinti failo pavyzdžio turinį, eilutę po eilutės.
$ awk 'print' sample_file.txt
2 pavyzdys: naudokite „awk“, kad atspausdintumėte tik tas linijas, kurios atitinka nurodytą modelį
Su awk galite nurodyti modelį ir komanda atspausdins tik tas eilutes atitinkančias eilutes.
Sintaksė:
$ awk '/ pattern_to_be_matched / print' failo vardas.txtPavyzdys:
Iš failo pavyzdžio, jei noriu atspausdinti tik eilutę (-es), kurioje yra kintamasis „B“, galiu naudoti šią komandą:
$ awk '/ B / print' sample_file.txt
Kad pavyzdys būtų prasmingesnis, leiskite man atspausdinti tik informaciją apie profesoriaus darbuotojus.
$ awk '/ professor / print' sample_file.txt
Komanda išspausdina tik eilutes / įrašus, kuriuose yra eilutė „profesorius“, taigi turime daugiau vertingos informacijos, gautos iš duomenų.
3 pavyzdys. Norėdami padalyti failą taip, kad būtų spausdinami tik konkretūs laukai / stulpeliai, naudokite awk
Užuot atspausdinę visą failą, galite padaryti awk spausdinti tik tam tikrus failo stulpelius. Pagal numatytuosius nustatymus Awk visus eilutėje žodžius, atskirtus tarpais, laiko stulpelių įrašais. Jis saugo įrašą kintamajame $ N. Kur 1 USD reiškia pirmąjį žodį, 2 USD saugo antrąjį žodį, 3 - ketvirtąjį ir t. T. 0 USD saugo visą eilutę, taigi eilutė spausdinama, kaip paaiškinta 1 pavyzdyje.
Sintaksė:
$ awk 'print $ N,… .' failo pavadinimas.txtPavyzdys:
Ši komanda atspausdins tik pirmąjį mano pavyzdžio failo stulpelį (pavadinimą) ir antrąjį stulpelį (temą):
$ awk 'print $ 1, $ 2' sample_file.txt
4 pavyzdys: naudokite „Awk“, kad suskaičiuotumėte ir atspausdintumėte eilučių, kuriose derinamas raštas, skaičių
Galite nurodyti awk suskaičiuoti eilučių, kuriose atitinka nurodytą modelį, skaičių ir tada išleisti tą „skaičių“.
Sintaksė:
$ awk '/ pattern_to_be_matched / ++ cnt END spausdinti "Count =", cnt'failo pavadinimas.txt
Pavyzdys:
Šiame pavyzdyje noriu suskaičiuoti asmenų, dėstančių dalyką „anglų kalba“, skaičių. Todėl pasakysiu komandai awk, kad ji atitiktų modelį „anglų kalba“, ir išspausdysiu eilučių, kuriose šis modelis sutampa, skaičių.
$ awk '/ english / ++ cnt END spausdinti "Count =", cnt' sample_file.txt
Čia pateiktas skaičius rodo, kad 2 žmonės moko anglų kalbos iš pavyzdinių bylos įrašų.
5 pavyzdys: naudokite „awk“, jei norite spausdinti tik eilutes, turinčias daugiau nei konkretų simbolių skaičių
Šiai užduočiai atlikti naudosime įmontuotą awk funkciją, vadinamą „ilgis“. Ši funkcija grąžina įvesties eilutės ilgį. Taigi, jei norime, kad „awk“ spausdintų tik eilutes, kurių simbolių skaičius yra didesnis arba net mažesnis, ilgio funkciją galime naudoti taip:
Jei norite spausdinti linijas, kurių simboliai yra didesni nei skaičius:
$ awk 'length ($ 0)> n' failo vardas.txtJei norite spausdinti linijas, kurių simboliai yra mažesni nei skaičius:
$ awk 'ilgis ($ 0) < n' filename.txtKur n yra simbolių, kuriuos norite nurodyti eilutei, skaičius.
Pavyzdys:
Ši komanda atspausdins tik tas eilutes iš mano pavyzdinio failo, kurių simboliai yra didesni nei 30:
$ awk 'ilgis ($ 0)> 30' pavyzdinis_failas.txt
6 pavyzdys: naudokite awk, kad išsaugotumėte komandos išvestį į kitą failą
Naudodami peradresavimo operatorių '>', galite naudoti komandą awk, kad išspausdintumėte jos išvestį į kitą failą. Tai galite naudoti taip:
$ awk 'kriterijai_į_print "failo vardas.txt> outputfile.txtPavyzdys:
Šiame pavyzdyje naudosiu peradresavimo operatorių su savo awk komanda norėdamas atspausdinti tik darbuotojų vardus (1 stulpelis) į naują failą:
$ awk 'print $ 1' pavyzdinis failas.txt> darbuotojo vardai.txt
Per „cat“ komandas patikrinau, ar naujame faile yra tik darbuotojų vardai.
7 pavyzdys: naudokite awk, kad iš failo atspausdintumėte tik ne tuščias eilutes
„Awk“ turi keletą įmontuotų komandų, kuriomis galite filtruoti išvestį. Pavyzdžiui, NF komanda naudojama norint išsaugoti laukų skaičių dabartiniame įvesties įraše. Čia naudosime komandą NF, kad atspausdintume tik tuščias failo eilutes:
$ awk 'NF> 0' pavyzdinis_failas.txtAkivaizdu, kad tuščioms eilutėms atsispausdinti galite naudoti šią komandą:
$ awk 'NF < 0' sample_file.txt8 pavyzdys: naudokite awk, kad suskaičiuotumėte visas failo eilutes
Kita įmontuota funkcija, vadinama NR, skaičiuoja nurodyto failo įvesties įrašų (paprastai eilučių) skaičių. Galite naudoti šią funkciją awk taip, kad suskaičiuotumėte failo eilučių skaičių:
$ awk 'END print NR' pavyzdinis failas.txt
Tai buvo pagrindinė informacija, kurią turite pradėti skirstydami failus naudodami komandą awk. Galite naudoti šių pavyzdžių derinį, kad gautumėte prasmingesnę informaciją iš eilučių failo per awk.