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

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.

Snakk med en ingeniør

Serverproblemer? Nettsted hacket? Langsom innlasting?

Kritiske problemer løst på 30 minutter — døgnåpent, 7 dager i uken.

Bestill nødhjelp support@kinetikatech.com