awk
String manipulatie functies
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
starteen negatieve waarde krijgt, druktGNUawk de hele string af en alslengtheen niet-nulwaarde krijgt, retourneertGNUawk eennullstring en varieert het gedrag tussen de verschillende implementaties vanawk.