awk
String-Manipulationsfunktionen
Suche…
Syntax
- Index (groß, wenig)
- Länge oder Länge ()
- Länge (String)
- Übereinstimmung (Zeichenfolge, Regex)
- Split (String, Array, Trennzeichen)
- Split (String, Array)
- sprintf (format, ...)
- Sub (Regex, Subst, String)
- Sub (Regex, Subst)
- gsub (Regex, Subst)
- gsub (Regex, Subst, String)
- substr (Zeichenfolge, Anfang, Ende)
- substr (String, Start)
- Tolower (Schnur)
- toupper (string)
Parameter
| Parameter | Einzelheiten |
|---|---|
| groß | Die Zeichenfolge, die nach "wenig" durchsucht wird. |
| Ende | Der Index, an dem die Unterzeichenfolge beendet werden soll. |
| Format | Eine printf Formatzeichenfolge. |
| wenig | Die Zeichenfolge, nach der gesucht werden soll, in "big". |
| Regex | Ein Extended-Regular-Ausdruck . |
| Start | Der Index, an dem die Unterzeichenfolge beginnen soll. |
| Schnur | Ein Faden. |
| Subst | Die Zeichenfolge, die den übereinstimmenden Teil ersetzen soll. |
String in Großbuchstaben konvertieren
Die Funktion toupper konvertiert eine Zeichenfolge in Großbuchstaben (Großbuchstaben). Zum Beispiel:
BEGIN {
greeting = "hello"
loud_greeting = toupper(greeting)
print loud_greeting
}
Dieser Code gibt "HELLO" aus, wenn er ausgeführt wird.
String-Verkettung
Die Verkettung von Zeichenfolgen erfolgt einfach durch das Schreiben von Ausdrücken nebeneinander ohne Operator. Zum Beispiel:
BEGIN {
user = "root"
print "Hello "user "!"
}
wird drucken: Hello root!
Beachten Sie, dass Ausdrücke nicht durch Leerzeichen getrennt werden müssen.
Hash eines Strings berechnen
Während die Implementierung eines der Standard-Hash-Algorithmen in awk wahrscheinlich eine langwierige Aufgabe ist, ist die Definition einer Hash- Funktion, die als Handle für Textdokumente verwendet werden kann, viel einfacher zu handhaben. In einer praktischen Situation, in der eine solche Funktion nützlich ist, ist das Zuweisen von Kurz-IDs zu Elementen, deren Beschreibung gegeben ist, beispielsweise Testfällen, so dass die Kurz-ID vom Benutzer als Referenz für den Artikel angegeben werden kann, anstatt dessen lange Beschreibung anzugeben.
Die Hash- Funktion muss Zeichen in numerische Codes umwandeln, was durch die Verwendung einer am Anfang des Skripts initialisierten Nachschlagetabelle erreicht wird. Die Hash- Funktion wird dann mithilfe modularer arithmetischer Transformationen berechnet, einem sehr klassischen Ansatz für die Berechnung von Hashes.
Zu Demonstrationszwecken fügen wir eine Regel hinzu, um die Eingabezeilen mit ihrem Hash zu dekorieren. Diese Regel ist jedoch nicht erforderlich, um die Funktion zu verwenden:
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) }
Wir speichern das Programm oben in der Datei hash.awk und zeigen es anhand einer kurzen Liste klassischer englischer Buchtitel:
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
Die Ausgabe ist
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
Bei Anwendung auf jede der 6948 nicht leeren Zeilen meines Lieblingsroman erzeugt diese Hash-Funktion keine Kollision.
Konvertieren Sie den String in Kleinbuchstaben
AWK wird häufig für die Bearbeitung ganzer Dateien mit einer Liste von Strings verwendet. Nehmen wir an, die Datei awk_test_file.txt enthält:
First String
Second String
Third String
Um alle Zeichenfolgen in Kleinbuchstaben umzuwandeln, führen Sie Folgendes aus:
awk '{ print tolower($0) }' awk_test_file.txt
Das wird resultieren:
first string
second string
third string
String-Text-Ersetzung
Mit der SUB-Funktion können Sie Text in awk ersetzen
Sub (Regex, Ersetzung, Ziel)
Dabei könnte Regex ein vollständiger regulärer Ausdruck sein
$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
Substratextraktion
GNU awk unterstützt eine Sub-String-Extraktionsfunktion, um eine Zeichenfolge fester Länge aus einem Hauptstring zurückzugeben. Die Syntax lautet
*substr(string, start [, length ])*
wo string ist Quellzeichenfolge und start markiert den Beginn der Unterkette Position Sie die Extraktion wollen für eine optionale Länge getan werden length Zeichen. Wenn die Länge nicht angegeben ist, wird die Extraktion bis zum Ende der Zeichenfolge durchgeführt.
Das erste Zeichen der Zeichenfolge wird als Zeichen Nummer Eins behandelt.
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3, 4) # Start at character 3 for a length of 4 characters
print substring
}'
gibt die Unterzeichenfolge TEST .
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3) # Start at character 3 till end of the string
print substring
}'
Dadurch wird die Unterzeichenfolge von Zeichenposition 3 bis zum Ende der gesamten Zeichenfolge TESTstring und TESTstring Zeichenfolge zurückgegeben
Hinweis:-
- Wenn für
startein negativer Wert angegeben wird, gibtGNUawk den gesamten String aus. Wennlengthfür einen Wert ungleich Null angegeben wird, gibt das Verhalten vonGNUawk einennullund das Verhalten variiert zwischen den verschiedenen Implementierungen vonawk.