Ricerca…


Sintassi

  • indice (grande, piccolo)
  • lunghezza o lunghezza ()
  • length (stringa)
  • match (stringa, regex)
  • split (string, array, separator)
  • split (stringa, array)
  • sprintf (formato, ...)
  • sub (regex, subst, string)
  • sub (regex, subst)
  • gsub (regex, subst)
  • gsub (regex, subst, string)
  • substr (stringa, inizio, fine)
  • substr (stringa, inizio)
  • tolower (stringa)
  • toupper (stringa)

Parametri

Parametro Dettagli
grande La stringa che viene scansionata per "piccolo".
fine L'indice in cui terminare la sottostringa.
formato Una stringa di formato printf .
poco La stringa da cercare in "big".
regex Un'espressione estesa-regolare .
inizio L'indice in cui iniziare la sottostringa.
stringa Una stringa.
subst La stringa da sostituire per la parte corrispondente.

Conversione di stringa in lettere maiuscole

La funzione toupper convertirà una stringa in lettere maiuscole (lettere maiuscole). Per esempio:

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

Questo codice genererà "HELLO" quando è in esecuzione.

Concatenazione di stringhe

La concatenazione delle stringhe viene eseguita semplicemente scrivendo espressioni l'una accanto all'altra senza alcun operatore. Per esempio:

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

stamperà: Hello root!

Nota che le espressioni non devono essere separate da spazi bianchi.

Calcolare un hash di una stringa

L'implementazione di uno degli algoritmi di hashing standard in awk è probabilmente un compito noioso, la definizione di una funzione di hash che può essere utilizzata come handle per i documenti di testo è molto più trattabile. Una situazione pratica in cui tale funzione è utile consiste nell'assegnare id brevi a elementi forniti della loro descrizione, ad esempio casi di test, in modo che l'id breve possa essere fornito come riferimento all'elemento dall'utente anziché fornire la sua descrizione lunga.

La funzione di hash deve convertire i caratteri in codici numerici, il che si ottiene utilizzando una tabella di ricerca inizializzata all'inizio dello script. La funzione di hash viene quindi calcolata utilizzando trasformazioni aritmetiche modulari, un approccio molto classico al calcolo degli hash.

A scopo dimostrativo, aggiungiamo una regola per decorare le linee di input con il loro hash, ma questa regola non è necessaria per utilizzare la funzione:

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

Salviamo il programma sopra nel file hash.awk e lo dimostriamo in una breve lista di titoli classici di libri inglesi:

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

L'output è

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

Quando viene applicato su ciascuna delle 6948 righe non vuote del mio romanzo preferito, questa funzione di hash non genera alcuna collisione.

Converti stringa in minuscolo

AWK spesso usato per manipolare interi file contenenti un elenco di stringhe. Diciamo che il file awk_test_file.txt contiene:

First String
Second String
Third String

Per convertire tutte le stringhe in minuscolo eseguire:

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

Ciò comporterà:

first string
second string
third string

Sostituzione del testo stringa

La funzione SUB consente di sostituire il testo all'interno di awk

sub (regexp, replacement, target)

dove regexp potrebbe essere un'espressione regolare completa

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

Estrazione della sottostringa

GNU awk supporta una funzione di estrazione sotto stringa per restituire una sequenza di caratteri a lunghezza fissa da una stringa principale. La sintassi è

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

dove, string è stringa di origine e start segna l'inizio della posizione sub-stringa che si desidera l'estrazione da fare per un periodo opzionale length caratteri. Se la lunghezza non è specificata, l'estrazione viene eseguita fino alla fine della stringa.

Il primo carattere della stringa viene considerato come numero uno del carattere.

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

emetterà la stringa secondaria TEST .

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

questo estrae la sottostringa dalla posizione del carattere 3 alla fine dell'intera stringa, restituendo la stringa TESTstring

Nota:-

  • Se start viene assegnato un valore negativo, GNU awk stampa l'intera stringa e se alla length viene assegnato un valore diverso da zero, GNU awk restituisce una stringa null e il comportamento varia tra le diverse implementazioni di awk .


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow