- Skenējiet failus pa rindai.
- Sadaliet katru līniju laukos / kolonnās.
- Norādiet modeļus un salīdziniet faila līnijas ar šiem modeļiem
- Veiciet dažādas darbības uz līnijām, kas atbilst noteiktajam paraugam
Š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:
- Pirmajā slejā ir skolas darbinieku / skolotāju vārdi
- Otrajā kolonnā ir priekšmets, kuru māca darbinieks
- Trešajā slejā norādīts, vai darbinieks ir profesors vai docents
- Ceturtajā kolonnā ir darbinieka atalgojums
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.txtPiemē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.txtPiemē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.txtPiemē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.txtLai drukātu līnijas, kuru rakstzīmes ir mazākas par skaitli:
$ awk 'garums ($ 0) < n' filename.txtKur 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.txtPiemē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.txtAcīmredzot tukšo rindu drukāšanai varat izmantot šādu komandu:
$ awk 'NF < 0' sample_file.txt8. 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.