Linux-kommandoer og Shell-færdigheder
awk: Når kolonner bliver til programmer
awk er det, du rækker ud efter, når kolonner bliver arbejdsenheden: nginx-adgangslogfiler, /etc/passwd, df-output, alt hvad der lever i felter. Det er et komplet sprog (variabler, arrays, aritmetik, mønsterhandlingsregler) iført en one-liners tøj, som er den helt rigtige forklædning til log efterforskning. Den ærlige grænse: alt, hvad awk gør komfortabelt, er en one-liner, og alt, der kræver en side med blokke, er et Python-script, der ikke har indrømmet sig selv endnu.
Vigtige pointer
- Feltopdeling er kernetricket: awk -F: '$3 >= 1000 {print $1}' /etc/passwd viser de rigtige brugere, og -F'[,|]' håndterer adskillere med flere tegn, når cut allerede har givet op.
- Tæl med associative arrays: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure forvandler enhver log til en frekvenstabel på én linje.
- NR og NF besvarer filspørgsmål: 'NR==1' er overskriftslinjen, '{print NF}' tæller kolonner pr. række, og sammenligning af NR med en anden fils gemte værdier finder dubletter og huller.
- Match plus ekstrakt er det daglige brød: awk '/ 500 / {print $7, $9}' access.log trækker fejlsider med URL'er, og OFS lader dig genudskrive $0 efter at have redigeret et enkelt felt uden selv at omskrive linjen.
- BEGIN- og END-blokke er, hvor det samlede arbejde lever: BEGIN sætter separatorer, de midterste regler kører pr. linje, END udskriver totaler; tre blokke læses fint, fem er et manuskript iført en forklædning.
- Citering er shell one-liners' virkelige fjende: enkelt-citer programmet, dobbelt-citer bogstaver inde i det, og husk, at $7 inde i en dobbelt-citeret shell-streng aldrig når awk overhovedet.
- Numerisk arbejde får LC_ALL=C: lokalitetskommaer i tal og ulige sorteringer vender sammenligninger og sorterer sidelæns, og fastgørelse af lokaliteten er én linje, der sparer en eftermiddag.
- Kend loftet: citerede kommaer i CSV, indlejrede JSON eller stateful multiline-formater går til Python; awk er en skalpel og forbliver en.
Note fra marken
En akavet one-liner, der summerede dollarkolonner fra en log med lokale kommaer, producerede tal, som ingen stillede spørgsmålstegn ved, før regnskabet åbnede rapporten. LC_ALL=C flyttede ind i vores aliasbibliotek den uge og blev.
Ofte stillede spørgsmål
awk eller cut til søjlearbejde?
skæres til en fast separator og en almindelig kolonneliste; awk det øjeblik, betingelser, regex, aritmetik eller aggregater dukker op, på hvilket tidspunkt cut alligevel er ude af sin dybde.
Hvordan summerer jeg eller gennemsnittet en kolonne?
Aggreger i END: awk '{s += $5} END {print s, s/NR}' tilføjer og gennemsnitliggør felt fem på tværs af linjer; fjern tusinde separatorer først, hvis en lokalitet sætter kommaer i tallene.
Hvorfor opfører min awk one-liner sig anderledes på macOS?
macOS sender en POSIX awk uden GNU-udvidelser som -i inplace eller gensub; scripts, der kører på Linux, kan fejle stille og roligt der, så hold POSIX-formede one-liners, eller tag gawk med dig.
Kan awk parse JSON?
Ikke meningsfuldt: JSON har ingen kolonnestruktur, awk forstår, og regex-hack går i stykker på indlejrede objekter. Brug jq, som er awks form for JSON, eller Pythons json-modul, når jobbet vokser.
Sådan hjælper Kinetikatech med linux-kommandoer og shell-færdigheder
Det har vi gjort hundredvis af gange: De kommandoer og scriptvaner, der afgør, om en administrator driver en server eller bekæmper den: søg, transformer, overfør og overvåg tekst og processer med de værktøjer, der findes i enhver basisinstallation. Med Sikkerhed på Linux-servere og Serveradministration får du hele løkken: vi vurderer, implementerer, følger op hele døgnet og rykker ud inden for 30 minutter, når det er nødvendigt.