Hvordan bruger man awk

Denne linje bliver vist fordi den slutter med rs Brug ark med (\) Meta tegn Dette bruges til at beskrive hvadawk

Brug

mønster scanning og tekst behandling sprog.

Parametre

-f læs AWK program fra fil.

-S Kør i sandbox. Du kan ikke udføre system() samt redirect er disabled.

–help

Samt mange flere.

Eksempler

$ awk

Hvordan bruger man awk til at filtre tekst i filer. Når du køre komandoer en Linux shell til at få tekst ud fra en fil, er det mest fordi vi vil se om filen indenholder en bestemt tekst af en art. Dette er muligt en komandoen awk. awk er IKKE en bash komando men en gnu kommando. Som har nogle rigtig smarte muligheder for at lave filter på data i filer. Et regulære udtryk er en måde at beskrive hvordan filteret skal virke. Muligheder.

  1. (.) det it matcher alle normale tegn på nær ny linje.
  2. (*) det matcher ingen eller flere tegn af samme type
  3. [ character(s) ] it matches any one of the characters specified in character(s), one can also use a hyphen (-) to mean a range of characters such as [a-f], [1-5], and so on.
  4. ^ matcher begyndelse af linjerne i filen.
  5. $ matcher slutningen af linjerne i filen.
  6. \ escape tegn.

Den generalle syntax for awk er:

# awk ‘script’ filnavn ‘script’ er et kommando set som forstås af awk og bliver udført på filen som angives. Det virker på den måde at den laver en kopi af hver linje i filen og udføre scriptet kommandoerne og udlæser resultatet igen gemmen stdio. Dette gentages gemmen hele filen. I dette eksempel bruger vi formen ‘/søgefter/’ typen. Hvor søgefter er det regulære udtryk som vi skal finde. Her udskrives alle linjer fra filen, da der ikke er givet noget regulært udtryk.

$ awk '//{print}' /etc/hosts 127.0.0.1 localhost 
# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters

I dette eksempel søges der efter localhost så awk vil udskrive alle linjer som indenholder ordret localhost fra /etc/hosts filen.

$ awk '/localhost/{print}' /etc/hosts 127.0.0.1 localhost ::1 ip6-localhost ip6-loopback

Brug ark og søg efter mønster. Den (.) Vil matche strenge indeholder loc , localhost i eksemplet nedenfor.

$ awk '/l.c/{print}' /etc/hosts 
127.0.0.1 localhost 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet
$ awk '/l*c/{print}' /etc/localhost 
127.0.0.1 localhost 
# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix

Brug ark til at finde set af tegn. [] Dette eksempel [al1] vil ark matche alle tekster med disse tegn a eller l eller 1 i filen /etc/hosts

$ awk '/[al1]/{print}' /etc/hosts 
127.0.0.1 localhost 
# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters

Dette eksempel matcher vi tekst som starter med K eller k efterfulgt af tegnet T

$ awk '/[Kk]T/{print}' /etc/hosts 
192.168.3.5 KTech-lab

Du kan også specificere en range af tegn. Ark forstår disse typer.

  1. [0-9]<(code> et enkelt nummer.
  2. [a-z] Et enkelt tegn.
  3. [A-Z] Et enkelt stort tegn.
  4. [a-zA-Z] Et enkelt tegn lille eller stort.
  5. [a-zA-Z 0-9] Et enkelt tegn eller nummer.

Her er nogle eksempler.

$ awk '/[0-9]/{print}' /etc/hosts 127.0.0.1 localhost 
# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters

Alle disse linjer bliver vist fordi de indeholder mindst et tal i dette eksempel

$ awk '/[0-2]/{print}' /etc/hosts 
127.0.0.1 localhost 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters

Alle disse linjer bliver vist fordi de indeholder tal mellem 0 og 2.

Brug ark med (^) Meta Character til at finde tekst som matcher begyndelse af linjerne i filen.

$ awk '/^fe/{print}' /etc/hosts 
fe00::0 ip6-localnet 

Denne linje bliver vist fordi den starter med fe

$ awk '/^ff/{print}' /etc/hosts 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters 

Brug ark med ($) Meta Character til at finde tekst som matcher slutningen af linjerne i filen. Det matcher alle linjer som ender med det vi søger efter.

$ awk '/rs$/{print}' /etc/hosts 
ff02::2 ip6-allrouters 

 

 

Author:

Jeg er en professionel system administrator og grundlægger af linuxboxen.dk Jeg er en ivrig Linux-elsker og open source-entusiast. Jeg bruger Ubuntu og tror på at dele viden. Bortset fra Linux, elsker musik og dyr. Jeg er en stor fan af Dire straits.

Skriv et svar