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 start otrzyma wartość ujemną, GNU awk drukuje cały ciąg, a jeśli podano length niezerową, zachowanie GNU awk zwraca łańcuch null a zachowanie różni się w zależności od różnych implementacji awk .


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow