NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
DA

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.

Tal med en ingeniør

Serverproblemer? Hacket website? Langsom indlæsning?

Kritiske problemer løst inden for 30 minutter — døgnet rundt, 7 dage om ugen.

Få akut hjælp support@kinetikatech.com