awk
Funkcje manipulacji ciągami
Szukaj…
Składnia
- indeks (duży, mały)
- długość lub długość ()
- długość (ciąg)
- dopasowanie (ciąg, wyrażenie regularne)
- podział (ciąg, tablica, separator)
- podział (ciąg, tablica)
- sprintf (format, ...)
- sub (regex, subst, string)
- sub (regex, subst)
- gsub (regex, subst)
- gsub (regex, subst, string)
- substr (ciąg, początek, koniec)
- substr (ciąg, początek)
- tolower (ciąg)
- toupper (string)
Parametry
| Parametr | Detale |
|---|---|
| duży | Ciąg, który jest skanowany w poszukiwaniu „małego”. |
| koniec | Indeks, przy którym kończy się podciąg. |
| format | Ciąg formatu printf . |
| mało | Ciąg do wyszukania w „dużym”. |
| regex | Rozszerzone wyrażenie regularne . |
| początek | Indeks, od którego należy rozpocząć podłańcuch. |
| strunowy | Sznurek |
| subst | Ciąg, który ma zastąpić dopasowaną część. |
Konwertowanie łańcucha na wielkie litery
Funkcja toupper przekształci ciąg znaków na wielkie litery (wielkie litery). Na przykład:
BEGIN {
greeting = "hello"
loud_greeting = toupper(greeting)
print loud_greeting
}
Ten kod wyświetli „CZEŚĆ” po uruchomieniu.
Łączenie ciągów
Łączenie łańcuchów odbywa się po prostu przez pisanie wyrażeń obok siebie bez żadnego operatora. Na przykład:
BEGIN {
user = "root"
print "Hello "user "!"
}
wydrukuje: Hello root!
Zauważ, że wyrażenia nie muszą być oddzielane spacjami.
Obliczanie skrótu ciągu
Podczas gdy implementacja jednego ze standardowych algorytmów mieszających w awk jest prawdopodobnie żmudnym zadaniem, zdefiniowanie funkcji skrótu, która może być używana jako uchwyt dokumentów tekstowych, jest znacznie łatwiejsze. Praktyczną sytuacją, w której taka funkcja jest przydatna, jest przypisywanie krótkich identyfikatorów do elementów na podstawie ich opisu, na przykład przypadków testowych, tak aby krótki identyfikator mógł być podawany przez użytkownika jako odniesienie do elementu zamiast dostarczania jego długiego opisu.
Funkcja skrótu musi konwertować znaki na kody numeryczne, co można osiągnąć, używając tabeli odnośników zainicjowanej na początku skryptu. Funkcja skrótu jest następnie obliczana przy użyciu modularnych przekształceń arytmetycznych, co jest bardzo klasycznym podejściem do obliczania skrótów.
Dla celów demonstracyjnych dodajemy regułę dekorującą linie wejściowe ich skrótem, ale ta reguła nie jest potrzebna do korzystania z funkcji:
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) }
Zapisujemy powyższy program do pliku hash.awk i pokazujemy go na krótkiej liście klasycznych angielskich tytułów książek:
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
Dane wyjściowe to
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
Po zastosowaniu na każdej z 6948 niepustych linii mojej ulubionej powieści ta funkcja skrótu nie powoduje kolizji.
Konwertuj ciąg na małe litery
AWK często służy do manipulowania całymi plikami zawierającymi listę ciągów. Powiedzmy, że plik awk_test_file.txt zawiera:
First String
Second String
Third String
Aby przekonwertować wszystkie ciągi znaków na małe, wykonaj:
awk '{ print tolower($0) }' awk_test_file.txt
Spowoduje to:
first string
second string
third string
Zastępowanie tekstu ciągiem
Funkcja SUB pozwala zastąpić tekst w awk
sub (wyrażenie regularne, zamiana, cel)
gdzie wyrażenie regularne może być pełnym wyrażeniem regularnym
$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
Ekstrakcja podciągów
GNU awk obsługuje funkcję wyodrębniania podłańcuchów w celu zwrócenia sekwencji znaków o stałej długości z łańcucha głównego. Składnia jest następująca
*substr(string, start [, length ])*
gdzie string jest ciąg źródło i start wyznacza początek pozycji podciąg chcesz ekstrakcja być zrobione do opcjonalnej długości length znaków. Jeśli długość nie zostanie określona, wyodrębnianie zostanie wykonane do końca ciągu.
Pierwszy znak ciągu traktowany jest jako znak numer jeden.
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3, 4) # Start at character 3 for a length of 4 characters
print substring
}'
wyświetli TEST .
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3) # Start at character 3 till end of the string
print substring
}'
to wyodrębnia podłańcuch od pozycji znaku 3 do końca całego łańcucha, zwracając ciąg TESTstring
Uwaga:-
- Jeśli
startotrzyma wartość ujemną,GNUawk drukuje cały ciąg, a jeśli podanolengthniezerową, zachowanieGNUawk zwraca łańcuchnulla zachowanie różni się w zależności od różnych implementacjiawk.