Awk

Kā sadalīt virkņu failu ar Awk

Kā sadalīt virkņu failu ar Awk
Linux awk komanda (saīsināti no izstrādātāju vārdiem; Aho, Weinberger un Kernighan) ir lielisks veids, kā apstrādāt un analizēt virkņu failu. Lai faili būtu informatīvāki, tie ir jāorganizē rindu un kolonnu veidā. Pēc tam šiem failiem varat izmantot awk, lai:

Šajā rakstā mēs izskaidrosim awk komandas pamata lietojumu un to, kā to var izmantot virkņu faila sadalīšanai. Šī raksta piemērus esam veikuši Debian 10 Buster sistēmā, taču tos var viegli atkārtot lielākajā daļā Linux distros.

Faila paraugs, kuru izmantosim

Virkņu paraugs, ko izmantosim, lai parādītu komandas awk lietojumu, ir šāds:

Tas ir tas, ko norāda katra parauga faila kolonna:

1. piemērs: Izmantojiet Awk, lai izdrukātu visas faila rindas

Katras norādītā faila rindas drukāšana ir komandas awk noklusējuma darbība. Šajā komandas awk sintaksē mēs nenorādām nevienu modeli, kas awk būtu jādrukā, tāpēc komandai ir jāpiemēro darbība “drukāt” visām faila rindām.

Sintakse:

$ awk 'print' faila nosaukums.txt

Piemērs:

Šajā piemērā es saku komandai awk, lai izdrukātu faila parauga saturu pa rindai.

$ awk 'print' sample_file.txt

2. piemērs: Izmantojiet awk, lai drukātu tikai tās līnijas, kas atbilst norādītajam paraugam

Izmantojot awk, jūs varat norādīt modeli, un komanda drukās tikai līnijas, kas atbilst šim modelim.

Sintakse:

$ awk '/ pattern_to_be_matched / print' faila nosaukums.txt

Piemērs:

No faila parauga, ja es gribu izdrukāt tikai rindas (-as), kurā ir mainīgais “B”, es varu izmantot šādu komandu:

$ awk '/ B / print' sample_file.txt

Lai piemērs būtu jēgpilnāks, ļaujiet man izdrukāt tikai informāciju par darbiniekiem, kuri ir profesori.

$ awk '/ professor / print' sample_file.txt

Komanda drukā tikai tās rindas / ierakstus, kas satur virkni “profesors”, tādējādi mums ir vērtīgāka informācija, kas iegūta no datiem.

3. piemērs. Izmantojiet awk, lai sadalītu failu tā, lai tiktu drukāti tikai konkrēti lauki / kolonnas

Tā vietā, lai drukātu visu failu, varat izveidot awk, lai drukātu tikai konkrētas faila kolonnas. Pēc noklusējuma Awk visus rindas vārdus, atdalītus ar atstarpi, uzskata par kolonnu ierakstu. Tas saglabā ierakstu mainīgajā USD N. Ja $ 1 apzīmē pirmo vārdu, $ 2 glabā otro vārdu, $ 3 ceturto utt. $ 0 glabā visu līniju, tāpēc tiek drukāta rindiņa Who, kā paskaidrots 1. piemērā.

Sintakse:

$ awk 'print $ N,… .' faila nosaukums.txt

Piemērs:

Šī komanda drukās tikai mana parauga faila pirmo kolonnu (nosaukumu) un otro kolonnu (tēmu):

$ awk 'print $ 1, $ 2' sample_file.txt

4. piemērs: Izmantojiet Awk, lai saskaitītu un izdrukātu līniju skaitu, kurās modelis ir saskaņots

Jūs varat pateikt awk, lai saskaitītu līniju skaitu, kurās tiek saskaņots noteikts modelis, un pēc tam izvadīs šo skaitli.

Sintakse:

$ awk '/ pattern_to_be_matched / ++ cnt END drukāt "Count =", cnt'
faila nosaukums.txt

Piemērs:

Šajā piemērā es vēlos saskaitīt to cilvēku skaitu, kuri māca priekšmetu “angļu valoda”. Tāpēc es pateiksšu komandai awk, lai tā atbilstu zīmējumam “angļu valoda”, un izdrukāju līniju skaitu, kurās šis modelis ir saskaņots.

$ awk '/ english / ++ cnt END drukāt "Count =", cnt' sample_file.txt

Šeit uzskaitītais liecina, ka 2 cilvēki māca angļu valodu no paraugu failiem.

5. piemērs: Izmantojiet awk, lai drukātu tikai līnijas ar vairāk nekā noteiktu rakstzīmju skaitu

Šajā uzdevumā mēs izmantosim iebūvēto awk funkciju ar nosaukumu “length”. Šī funkcija atgriež ievades virknes garumu. Tādējādi, ja mēs vēlamies, lai awk drukātu tikai līnijas ar vairāk vai pat mazāk par rakstzīmju skaitu, mēs varam izmantot garuma funkciju šādā veidā:

Lai drukātu līnijas, kuru rakstzīmes ir lielākas par skaitli:

$ awk 'length ($ 0)> n' faila nosaukums.txt

Lai drukātu līnijas, kuru rakstzīmes ir mazākas par skaitli:

$ awk 'garums ($ 0) < n' filename.txt

Kur n ir rakstzīmju skaits, kuru vēlaties norādīt rindai.

Piemērs:

Šī komanda drukās tikai tās rindas no mana parauga faila, kuru rakstzīmes pārsniedz 30:

$ awk 'length ($ 0)> 30' sample_file.txt

6. piemērs: Izmantojiet awk, lai saglabātu komandas izvadi citā failā

Izmantojot novirzīšanas operatoru '>', jūs varat izmantot komandu awk, lai izdrukātu tās izvadi citā failā. Jūs to varat izmantot šādi:

$ awk 'criteria_to_print "faila nosaukums.txt> outputfile.txt

Piemērs:

Šajā piemērā es izmantošu novirzīšanas operatoru ar komandu awk, lai drukātu tikai darbinieku vārdus (1. sleja) jaunā failā:

$ awk 'print $ 1' sample_file.txt> darbinieku_vārdi.txt

Caur kaķu komandām es pārliecinājos, ka jaunajā failā ir tikai darbinieku vārdi.

7. piemērs: Izmantojiet awk, lai no faila drukātu tikai tukšas rindas

Awk ir dažas iebūvētas komandas, kuras varat izmantot izejas filtrēšanai. Piemēram, komandu NF izmanto, lai uzskaitītu laukus pašreizējā ievades ierakstā. Šeit mēs izmantosim komandu NF, lai drukātu tikai faila ne tukšās rindas:

$ awk 'NF> 0' sample_file.txt

Acīmredzot tukšo rindu drukāšanai varat izmantot šādu komandu:

$ awk 'NF < 0' sample_file.txt

8. piemērs: Izmantojiet awk, lai saskaitītu faila visu rindu skaitu

Vēl viena iebūvēta funkcija, ko sauc par NR, uzskaita konkrētā faila ievades ierakstu (parasti rindu) skaitu. Šo funkciju varat izmantot awk šādi: lai saskaitītu faila rindu skaitu:

$ awk 'END print NR' paraugfails.txt

Šī bija pamatinformācija, kas jums jāsāk ar failu sadalīšanu ar komandu awk. Varat izmantot šo piemēru kombināciju, lai caur awk iegūtu vairāk jēgpilnas informācijas no virkņu faila.

Top 5 spēļu tveršanas kartes
Mēs visi esam redzējuši un mīlējuši straumēšanas spēles pakalpojumā YouTube. PewDiePie, Jakesepticye un Markiplier ir tikai daži no labākajiem spēlētā...
Kā izstrādāt spēli Linux
Pirms desmit gadiem maz Linux lietotāju varētu paredzēt, ka viņu iecienītā operētājsistēma kādu dienu būs populāra spēļu platforma komerciālām videosp...
Komerciālo spēļu dzinēju atvērtā koda porti
Bezmaksas, atvērtā koda un starpplatformu spēļu dzinēju atpūtu var izmantot, lai spēlētu vecos, kā arī dažus no diezgan nesenajiem spēļu nosaukumiem. ...