awk
Fonctions de manipulation de chaînes
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
startune valeur négative,GNUawk imprime la chaîne entière et silengthune valeur différente de zéro, le comportementGNUawk renvoie une chaînenullet le comportement varie entre les différentes implémentations deawk.