Sök…


Syntax

  • index (stort, litet)
  • längd eller längd ()
  • längd (sträng)
  • matchning (sträng, regex)
  • split (sträng, array, separator)
  • split (string, array)
  • sprintf (format, ...)
  • sub (regex, subst, string)
  • sub (regex, subst)
  • gsub (regex, subst)
  • gsub (regex, subst, string)
  • substr (sträng, start, slut)
  • substr (sträng, start)
  • tolower (sträng)
  • TOUPPER (sträng)

parametrar

Parameter detaljer
stor Strängen som skannas efter "lite".
slutet Indexet där substrängen ska slutas.
formatera En printf formatsträng.
liten Strängen att söka efter i "stor".
regex Ett utökat-regelbundet uttryck .
Start Indexet där substrängen ska startas.
sträng En sträng.
subst Strängen som ska ersättas med den matchade delen.

Konvertera sträng till versaler

Funktionen toupper omvandlar en sträng till versaler (versaler). Till exempel:

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

Denna kod matar ut "HELLO" när den körs.

Strängen sammankoppling

Strängen sammanlänkning görs helt enkelt genom att skriva uttryck bredvid varandra utan någon operatör. Till exempel:

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

kommer att skriva ut: Hello root!

Observera att uttryck inte behöver separeras med vitrum.

Beräkna en hash från en sträng

Även om implementering av en av standard hash-algoritmen i awk förmodligen är en tråkig uppgift, är det mycket mer spårbart att definiera en hash- funktion som kan användas som handtag för textdokument. En praktisk situation där en sådan funktion är användbar är att tilldela korta id till objekt som ges deras beskrivning, till exempel testfall, så att kort-id kan ges som referens till objektet av användaren istället för att tillhandahålla den långa beskrivningen.

Hashfunktionen måste konvertera tecken till numeriska koder, vilket åstadkoms genom att använda en uppslagstabell som initialiserats i början av skriptet. Hashfunktionen beräknas sedan med hjälp av modulära aritmetiska transformationer, en mycket klassisk metod för beräkningen av hascher.

För demonstrationsändamål lägger vi till en regel för att dekorera inmatningslinjer med deras hash, men denna regel behövs inte för att använda funktionen:

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) }

Vi sparar programmet ovan i filen hash.awk och demonstrerar det på en kort lista med klassiska engelska boktitlar:

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

Utgången är

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

När den används på var och en av de 6948 icke-tomma raderna i min favoritroman genererar inte denna hashfunktion någon kollision.

Konvertera sträng till små bokstäver

AWK används ofta för att manipulera hela filer som innehåller en lista med strängar. Låt oss säga filen awk_test_file.txt innehåller:

First String
Second String
Third String

Så här konverterar du alla strängar till exekvering av små bokstäver:

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

Detta kommer att resultera:

first string
second string
third string

Stringtextersättning

SUB-funktion gör det möjligt att ersätta text inuti awk

sub (regexp, ersättning, mål)

där regexp kan vara ett fullständigt regelbundet uttryck

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

Understrängsextraktion

GNU awk stöder en substrängs extraktionsfunktion för att returnera en karaktersekvens med fast längd från en huvudsträng. Syntaxen är

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

där, string är källsträng och start markerar början på den substrängsposition du vill att extraktionen ska göras för valfria length . Om längden inte anges görs extraktionen fram till slutet av strängen.

Det första tecknet i strängen behandlas som tecken nummer ett.

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

kommer att mata ut understrängen TEST .

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

detta extraherar delsträngen från karaktärsposition 3 till slutet av hela strängen och returnerar TESTstring

Notera:-

  • Om start ges ett negativt värde, trycker GNU awk hela strängen och om length ges ett icke-nollvärde ger GNU awk-beteende en null och beteendet varierar mellan olika implementeringar av awk .


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow