Linux-kommandoer og skallferdigheter
awk: Når kolonner blir til programmer
awk er det du strekker deg etter når kolonner blir arbeidsenheten: nginx-tilgangslogger, /etc/passwd, df-utgang, alt som lever i felt. Det er et komplett språk (variabler, arrays, aritmetikk, mønsterhandlingsregler) iført klær med one-liner, som er akkurat den rette forkledningen for loggetterforskning. Den ærlige grensen: alt awk gjør komfortabelt er en one-liner, og alt som trenger en side med blokker er et Python-skript som ikke har innrømmet seg selv ennå.
Nøkkelpunkter
- Feltdeling er kjernetrikset: awk -F: '$3 >= 1000 {print $1}' /etc/passwd viser de virkelige brukerne, og -F'[,|]' håndterer skilletegn med flere tegn når cut allerede har gitt opp.
- Tell med assosiative arrays: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure gjør enhver logg til en frekvenstabell på én linje.
- NR og NF svarer på filspørsmål: 'NR==1' er overskriftslinjen, '{print NF}' teller kolonner per rad, og ved å sammenligne NR med en annen fils lagrede verdier finner du duplikater og hull.
- Match pluss-ekstrakt er det daglige brødet: awk '/ 500 / {print $7, $9}' access.log henter feilsider med URL-er, og OFS lar deg skrive ut $0 på nytt etter å ha redigert et enkelt felt uten å skrive om linjen selv.
- BEGIN- og END-blokker er der det aggregerte arbeidet lever: BEGIN setter skilletegn, midtreglene kjøres per linje, END skriver ut totaler; tre blokker leses greit, fem er et manus iført en forkledning.
- Å sitere er den virkelige fienden til shell one-liners: enkeltsiter programmet, doble anførselstegn inni det, og husk at $7 i en dobbel-sitert shell-streng aldri når awk i det hele tatt.
- Numerisk arbeid får LC_ALL=C: stedskomma i tall og oddetallssammenstillinger snur sammenligninger og sorterer sidelengs, og å feste lokaliteten er én linje som sparer en ettermiddag.
- Kjenn taket: angitt komma i CSV, nestet JSON eller stateful multiline formater går til Python; awk er en skalpell og forblir en.
Feltnotat
En awk one-liner som summerte dollarkolonner fra en logg med stedskomma produserte tall ingen stilte spørsmål ved før regnskap åpnet rapporten. LC_ALL=C flyttet inn i aliasbiblioteket vårt den uken og ble.
Vanlige spørsmål
awk eller cut for kolonnearbeid?
kutt for en fast skillelinje og en vanlig kolonneliste; awk i det øyeblikket betingelser, regex, aritmetikk eller aggregater dukker opp, og da er kuttet uansett ute av dybden.
Hvordan summerer jeg eller gjennomsnitt en kolonne?
Aggregert i END: awk '{s += $5} END {print s, s/NR}' legger til og gjennomsnittlig felt fem på tvers av linjer; fjern tusenvis av skilletegn først hvis en lokalitet setter kommaer i tallene.
Hvorfor oppfører min awk one-liner seg annerledes på macOS?
macOS sender en POSIX awk uten GNU-utvidelser som -i inplace eller gensub; Skript som kjører på Linux kan mislykkes stille der, så hold POSIX-formede one-liners eller ta med deg kikkerten.
Kan awk analysere JSON?
Ikke meningsfullt: JSON har ingen kolonnestruktur awk forstår og regex-hack bryter på nestede objekter. Bruk jq, som er awks form for JSON, eller Pythons json-modul når jobben vokser.
Slik hjelper Kinetikatech med linux-kommandoer og skallferdigheter
Dette gjør vi i dag: Kommandoene og skriptvanene som avgjør om en administrator driver en server eller bekjemper den: søk, transformer, overføring og overvåk tekst og prosesser med verktøyene som finnes i hver basisinstallasjon. Vår tjeneste Sikring av Linux-servere og Serveradministrasjon dekker alt, fra evaluering til implementering, overvåking 24/7 og nødinngriping i 30 minutter.