awk
Funciones de manipulación de cuerdas.
Buscar..
Sintaxis
- índice (grande, pequeño)
- longitud o longitud ()
- longitud (cuerda)
- coincidencia (cadena, expresión regular)
- dividir (cadena, matriz, separador)
- dividir (cadena, matriz)
- sprintf (formato, ...)
- sub (regex, subst, string)
- sub (regex, subst)
- gsub (regex, subst)
- gsub (regex, subst, string)
- substr (cadena, comienzo, final)
- substr (cadena, inicio)
- tolower (cadena)
- toupper (cadena)
Parámetros
| Parámetro | Detalles |
|---|---|
| grande | La cadena que se escanea para "poco". |
| fin | El índice en el que terminar la subcadena. |
| formato | Una printf formato printf . |
| pequeño | La cadena para buscar en "grande". |
| expresiones regulares | Una expresión regular-extendida . |
| comienzo | El índice en el que se inicia la subcadena. |
| cuerda | Una cuerda. |
| substancia | La cadena para sustituir en la porción coincidente. |
Convertir cadena a mayúsculas
La función toupper convertirá una cadena a mayúsculas (mayúsculas). Por ejemplo:
BEGIN {
greeting = "hello"
loud_greeting = toupper(greeting)
print loud_greeting
}
Este código mostrará "HOLA" cuando se ejecute.
Concatenacion de cuerdas
La concatenación de cadenas se realiza simplemente escribiendo expresiones una al lado de la otra sin ningún operador. Por ejemplo:
BEGIN {
user = "root"
print "Hello "user "!"
}
se imprimirá: Hello root!
Tenga en cuenta que las expresiones no tienen que estar separadas por espacios en blanco.
Calcular un hash de una cadena
Si bien la implementación de uno de los algoritmos de hash estándar en awk es probablemente una tarea tediosa, la definición de una función de hash que se puede utilizar como un identificador de documentos de texto es mucho más manejable. Una situación práctica en la que una función de este tipo es útil es asignar identificadores cortos a los elementos dada su descripción, por ejemplo, casos de prueba, para que el usuario pueda proporcionar el identificador corto como referencia al elemento en lugar de proporcionar su descripción larga.
La función hash necesita convertir los caracteres en códigos numéricos, lo que se logra mediante el uso de una tabla de búsqueda inicializada al principio del script. La función hash se calcula luego mediante transformaciones aritméticas modulares, un enfoque muy clásico para el cálculo de hashes.
Para fines de demostración, agregamos una regla para decorar las líneas de entrada con su hash, pero esta regla no es necesaria para usar la función:
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) }
Guardamos el programa anterior en el archivo hash.awk y lo demostramos en una breve lista de títulos de libros en inglés clásico:
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 salida es
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
Cuando se aplica en cada una de las 6948 líneas que no están en blanco de mi novela favorita, esta función hash no genera ninguna colisión.
Convertir la cadena a minúsculas
AWK se utiliza a menudo para manipular archivos completos que contienen una lista de cadenas. Digamos que el archivo awk_test_file.txt contiene:
First String
Second String
Third String
Para convertir todas las cadenas a minúsculas ejecute:
awk '{ print tolower($0) }' awk_test_file.txt
Esto resultará:
first string
second string
third string
Sustitución de texto de cadena
La función SUB permite sustituir texto dentro de awk.
sub (regexp, reemplazo, destino)
donde regexp podría ser una expresión regular completa
$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
Extracción de subcadenas
GNU awk admite una función de extracción de subcadenas para devolver una secuencia de caracteres de longitud fija desde una cadena principal. La sintaxis es
*substr(string, start [, length ])*
donde, la string es la string origen y el start marca el inicio de la posición de la subcadena en la que desea que se realice la extracción para los caracteres de length longitud opcional. Si no se especifica la longitud, la extracción se realiza hasta el final de la cadena.
El primer carácter de la cadena se trata como el número uno de caracteres.
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3, 4) # Start at character 3 for a length of 4 characters
print substring
}'
dará salida a la subcadena TEST .
awk '
BEGIN {
testString = "MyTESTstring"
substring = substr(testString, 3) # Start at character 3 till end of the string
print substring
}'
esto extrae la TESTstring posición del carácter 3 al final de toda la cadena, devolviendo TESTstring
Nota:-
- Si al
startse le asigna un valor negativo,GNUawk imprime toda la cadena y si a lalengthse le asigna un valor distinto de cero, el comportamiento de awk deGNUdevuelve una cadenanully el comportamiento varía entre las diferentes implementaciones deawk.