Zoeken…


Syntaxis

  • index (groot, klein)
  • lengte of lengte ()
  • lengte (string)
  • match (string, regex)
  • split (string, array, scheidingsteken)
  • split (string, array)
  • sprintf (formaat, ...)
  • sub (regex, subst, string)
  • sub (regex, subst)
  • gsub (regex, subst)
  • gsub (regex, subst, string)
  • substr (tekenreeks, start, einde)
  • substr (tekenreeks, start)
  • tolower (string)
  • toupper (string)

parameters

Parameter Details
groot De tekenreeks die wordt gescand op "klein".
einde De index waarmee de subtekenreeks wordt beëindigd.
formaat Een tekenreeks in printf indeling.
weinig De tekenreeks waarnaar moet worden gescand in "groot".
regex Een uitgebreide reguliere expressie .
begin De index waarmee de subtekenreeks wordt gestart.
draad Een draad.
subst De tekenreeks die moet worden vervangen door het overeenkomende gedeelte.

Tekenreeks omzetten in hoofdletters

De functie toupper converteert een string naar hoofdletters (hoofdletters). Bijvoorbeeld:

BEGIN {
    greeting = "hello"
    loud_greeting = toupper(greeting)
    print loud_greeting
}

Deze code zal "HELLO" uitvoeren wanneer deze wordt uitgevoerd.

String-aaneenschakeling

String-aaneenschakeling gebeurt eenvoudig door uitdrukkingen naast elkaar te schrijven zonder een operator. Bijvoorbeeld:

BEGIN {
   user = "root"
   print "Hello "user "!"
}

zal afdrukken: Hello root!

Merk op dat uitdrukkingen niet gescheiden moeten worden door witruimte.

Een hash van een string berekenen

Hoewel het implementeren van een van de standaard hashing-algoritmen in awk waarschijnlijk een vervelende taak is, is het definiëren van een hash- functie die kan worden gebruikt als een handvat voor tekstdocumenten veel beter traceerbaar. Een praktische situatie waarbij een dergelijke functie nuttig is, is om korte id's toe te wijzen aan items die hun beschrijving hebben, bijvoorbeeld testcases, zodat de korte id als referentie naar het item kan worden gegeven door de gebruiker in plaats van een lange beschrijving te geven.

De hash- functie moet tekens converteren naar numerieke codes, wat wordt bereikt door een opzoektabel te gebruiken die aan het begin van het script is geïnitialiseerd. De hash- functie wordt vervolgens berekend met behulp van modulaire rekenkundige transformaties, een zeer klassieke benadering van de berekening van hashes.

Voor demonstratiedoeleinden voegen we een regel toe om invoerregels met hun hash te decoreren, maar deze regel is niet nodig om de functie te gebruiken:

BEGIN{
  for(n=0;n<256;n++) {
    ord[sprintf("%c",n)] = n
  }
}

function hash(text, _prime, _modulo, _ax, _chars, _i)
{
  _prime = 104729;
  _modulo = 1048576;
  _ax = 0;
  split(text, _chars, "");
  for (_i=1; _i <= length(text); _i++) {
    _ax = (_ax * _prime + ord[_chars[_i]]) % _modulo;
  };
  return sprintf("%05x", _ax)
}

# Rule to demonstrate the function
#  These comments and the following line are not relevant
#  to the definition of the hash function but illustrate
#  its use.

{ printf("%s|%s\n", hash($0), $0) }

We slaan het programma hierboven op in het bestand hash.awk en demonstreren het op een korte lijst van klassieke Engelse boektitels:

awk -f hash.awk <<EOF
Wuthering Heights
Jane Eyre
Pride and Prejudice
The Mayor of Casterbridge
The Great Gatsby
David Copperfield
Great Expectations
The Return of the Soldier
Alice's Adventures in Wonderland
Animal Farm
EOF

De output is

6d6b1|Wuthering Heights
7539b|Jane Eyre
d8fba|Pride and Prejudice
fae95|The Mayor of Casterbridge
17fae|The Great Gatsby
c0005|David Copperfield
7492a|Great Expectations
12871|The Return of the Soldier
c3ab6|Alice's Adventures in Wonderland
46dc0|Animal Farm

Bij toepassing op elk van de 6948 niet-lege regels van mijn favoriete roman genereert deze hashfunctie geen botsing.

Tekenreeks omzetten in kleine letters

AWK vaak gebruikt voor het manipuleren van hele bestanden met een lijst met tekenreeksen. Laten we zeggen dat bestand awk_test_file.txt bevat:

First String
Second String
Third String

Om alle strings om te zetten naar kleine letters, voert u uit:

awk '{ print tolower($0) }' awk_test_file.txt

Dit zal resulteren in:

first string
second string
third string

Vervanging van stringtekst

SUB-functie maakt het mogelijk tekst in awk te vervangen

sub (regexp, vervanging, doel)

waar regexp een volledige reguliere expressie kan zijn

$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG

Substring extractie

GNU awk ondersteunt een substringextractie-functie om een reeks tekens met een vaste lengte uit een hoofdstring te retourneren. De syntaxis is

*substr(string, start [, length ])* 

waar, string is bron string en start markeert het begin van de sub-string positie die u wilt dat de extractie wordt uitgevoerd voor een optionele lengte length karakters. Als de lengte niet is opgegeven, wordt de extractie uitgevoerd tot het einde van de tekenreeks.

Het eerste teken van de tekenreeks wordt behandeld als teken nummer één.

awk '
BEGIN {
    testString = "MyTESTstring"
    substring  =  substr(testString, 3, 4)    # Start at character 3 for a length of 4 characters
    print substring
}'

zal de subtekenreeks TEST .

awk '
BEGIN {
    testString = "MyTESTstring"
    substring  =  substr(testString, 3)    # Start at character 3 till end of the string
    print substring
}'

dit extraheert de TESTstring van tekenpositie 3 tot het einde van de hele tekenreeks en retourneert TESTstring

Notitie:-

  • Als start een negatieve waarde krijgt, drukt GNU awk de hele string af en als length een niet-nulwaarde krijgt, retourneert GNU awk een null string en varieert het gedrag tussen de verschillende implementaties van awk .


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow