Recherche…


Syntaxe

  • index (gros, petit)
  • longueur ou longueur ()
  • longueur (chaîne)
  • match (chaîne, expression régulière)
  • split (chaîne, tableau, séparateur)
  • split (chaîne, tableau)
  • sprintf (format, ...)
  • sub (regex, subst, string)
  • sous (regex, subst)
  • gsub (regex, subst)
  • gsub (regex, subst, string)
  • substr (string, start, end)
  • substr (string, start)
  • tolower (string)
  • toupper (string)

Paramètres

Paramètre Détails
gros La chaîne qui est scannée pour "peu".
fin L'index auquel terminer la sous-chaîne.
format Une printf format printf .
peu La chaîne à rechercher dans "big".
regex Une expression régulière étendue .
début L'index sur lequel démarrer la sous-chaîne.
chaîne Un string.
subst La chaîne à remplacer dans la partie correspondante.

Conversion de chaîne en majuscule

La fonction toupper convertira une chaîne en majuscule (majuscules). Par exemple:

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

Ce code affichera "HELLO" lors de l'exécution.

Concaténation de chaînes

La concaténation de chaînes se fait simplement en écrivant des expressions côte à côte sans opérateur. Par exemple:

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

imprimera: Hello root!

Notez que les expressions ne doivent pas être séparées par des espaces.

Calculer un hash de chaîne

Bien que l'implémentation d'un algorithme de hachage standard dans awk soit probablement une tâche fastidieuse, la définition d'une fonction de hachage pouvant être utilisée comme descripteur de documents texte est beaucoup plus facile à gérer. Une situation pratique dans laquelle une telle fonction est utile consiste à attribuer des identifiants courts à des éléments en fonction de leur description, par exemple des cas de test, de sorte que l'identifiant court puisse être utilisé comme référence par l'utilisateur.

La fonction de hachage doit convertir les caractères en codes numériques, ce qui est fait en utilisant une table de consultation initialisée au début du script. La fonction de hachage est ensuite calculée en utilisant des transformations arithmétiques modulaires, une approche très classique du calcul des hachages.

A des fins de démonstration, nous ajoutons une règle pour décorer les lignes d'entrée avec leur hachage, mais cette règle n'est pas nécessaire pour utiliser la fonction:

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

Nous sauvegardons le programme ci-dessus dans le fichier hash.awk et le hash.awk sur une courte liste de titres classiques anglais:

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

La sortie est

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

Appliquée sur chacune des 6948 lignes non vides de mon roman préféré, cette fonction de hachage ne génère aucune collision.

Convertir une chaîne en minuscule

AWK est souvent utilisé pour manipuler des fichiers entiers contenant une liste de chaînes. Disons que le fichier awk_test_file.txt contient:

First String
Second String
Third String

Pour convertir toutes les chaînes en minuscule, exécutez:

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

Cela se traduira par:

first string
second string
third string

Substitution de texte de chaîne

La fonction SUB permet de substituer du texte dans awk

sous (expression rationnelle, remplacement, cible)

où l'expression rationnelle pourrait être une expression régulière complète

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

Extraction de sous-chaîne

GNU awk prend en charge une fonction d'extraction de sous-chaîne pour renvoyer une séquence de caractères de longueur fixe à partir d'une chaîne principale. La syntaxe est

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

où, string est la string source et start marque le début de la position de la sous-chaîne à laquelle vous souhaitez que l'extraction soit effectuée pour un caractère de length facultatif. Si la longueur n'est pas spécifiée, l'extraction est effectuée jusqu'à la fin de la chaîne.

Le premier caractère de la chaîne est traité comme le caractère numéro un.

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

va sortir la sous-chaîne TEST .

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

ceci extrait la sous-chaîne de la position de caractère 3 à la fin de la chaîne entière, renvoyant la chaîne de caractères TESTstring

Remarque:-

  • Si start une valeur négative, GNU awk imprime la chaîne entière et si length une valeur différente de zéro, le comportement GNU awk renvoie une chaîne null et le comportement varie entre les différentes implémentations de awk .


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow