Funciones Implícitas (Built-in) para Manipulación de Cadenas - AWK

Las funciones en esta sección examinan el texto de una o más cadenas.

index(cadena, cad_buscar)

Esto busca la primera ocurrencia de la cadena cad_buscar en la cadena cadena, y devuelve la posición donde se produce esa ocurrencia dentro de la cadena cadena. Por ejemplo:

awk 'BEGIN { print index("peanut", "an") }'
devuelve un `3'. Si no se encuentra cad_buscar, index devuelve un 0.

length(cadena)

Esto te da el número de caracteres de la cadena cadena. Si cadena es un número, la longitud de la cadena de dígitos que representa dicho número es devuelta. Por ejemplo, length(“abcde”) es 5. En contraste, length(15*35) devuelve 3, que es la longitud de la cadena que se corresponde con el número resultante (525).

Si no se le suministran argumentos, length devuelve la longitud de $0 (la línea completa).

match(cadena, expreg)

La función match busca en la cadena, cadena, la más grande, y más a la izquierda subcadena que concuerde con la expresión regular, expreg. Devuelve la posición de carácter, o índice, de donce dicha subcadena empieza (1, si empieza al principio de cadena). Si no se encuentra una subcadena que concuerde con la expresión regular, expreg, devuelve un 0.

La función match fija la variable implícita RSTART al valor de índice. También fija la variable implícita RLENGTH a la longitud de la subcadena que concuerda con la expresión regular. Si no se encuentra ninguna coincidencia, RSTART es fijado a 0, y RLENGTH a –1.

Por ejemplo:

awk '{
if ($1 == "FIND")
regex = $2 else {
where = match($0, regex) if (where)
print "La expresión regular ", regex, "encontrada en la posición ", where,
"en ", $0
}
}'

Este programa busca las líneas que concuerdan con la expresión regular almacenada en la variable regex. Esta expresión regular puede ser cambiada. Si la primera palabra de la línea es ‘FIND’, regex se cambia a la segunda palabra de esa línea. Por lo tanto, dado:

FIND fo*bar
My program was a foobar
But none of it would doobar
FIND Melvin JF+KM
This line is property of The Reality Engineering Co. This file created by Melvin.

awk imprime:

La expresión regular fo*bar encontrada en posicion 18 en My program was a foobar
La expresión regular Melvin encontrada en posición 26 en This file created by Melvin.

split(cadena, array, fieldsep)

Esto divide cadena en trozos separados por fieldsep, y almacena los trozos en array. El primer trozo se almacena en array[1], el segundo trozo en array[2], y así hasta el final. El valor cadena del tercer argumento, fieldsep, se utiliza como una expresión regular para buscar los sitios por los que particionar cadena. Si se omite el fieldsep, se utiliza el valor de FS. Split devuelve el número de elementos creados.

La función split, entonces, parte cadenas en trozos en una forma similar a la forma en la que las líneas de entrada son dividias en campos. Por ejemplo:

split("auto-da-fe", a, "-")

parte la cadena ‘auto-da-fe’ en tres campos usando ‘-‘ como separador. Fija los valores del array a tal y como sigue:

a[1] = "auto"
a[2] = "da"
a[3] = "fe"

el valor devuelto por esta llamada a la función split es 3.

sprintf(formato, expresion1, expresion2, ...)

Esta función devuelve (sin imprimirla) la cadena que la función printf habría impreso utilizando los mismos argumentos. Por ejemplo:

sprintf("pi = %.2f (aprox.)", 22/7)
devuelve la cadena "pi = 3.14 (aprox.)".

sub(expreg, replacement, cad_destino)

La función sub altera el valor de cad_destino. Busca este valor, el cuál debería ser una cadena, en la subcadena más a la izquierda que concuerde con la expresión regular, expreg, extendiendo esta concordancia tan lejos como fuese posible. Entonces la cadena completa se cambia reemplazando el texto encajado por replacement. La cadena modificada se convierte en el nuevo valor de cad_destino.

Esta función es peculiar porque target no es simplemente usada para calcular un valor: debe ser una variable, campo o referencia de array, de forma que sub pueda almacenar un valor modificado en la misma. Si se omite este argumento, entonces por defecto se usa y modifica $0. Por ejemplo:

str = "water, water, everywhere" sub(/at/, "ith", str)
fija str a "wither, water, everywhere", reemplazando la ocurrencia más a la izquierda y más larga de ‘at’
por ‘ith’.

La función sub devuelve el número de substituciones hechas (o 1 o 0)

Si el carácter especial ‘&’ aparece en replacement, el mantiene la subcadena precisa que concordó con regexp. (Si la expresión regular expreg puede encajar con más de una cadena, entonces esta subcadena precisa podría variar.) For example:

awk '{ sub(/candidate/, "& and his wife"); print }'

cambia la primera ocurrencia de ‘candidate’ a ‘candidate and his wife’ en cada línea de entrada.
El efecto de este carácter especial puede ser desactivado poniendo una barra invertida antes de él en la cadena. Como es usual, para insertar una barra invertida en la cadena, debes escribir dos barras invertidas. Por lo tanto, escribe ‘\\&’ en una cadena constante para incluir un literal ‘&’ en el replacement. Por ejemplo, aquí tienes como reemplazar el primer ‘|’ de cada línea por un ‘&’:

awk '{ sub(/\|/, "\\&"); print }'

Nota: como se mencionó anteriormente, el tercer argumento de sub debe ser un valori. Algunas versiones de awk permiten que el tercer argumento sea una expresión la cual no sea un valori. En tales casos, sub buscaría de todas formas el patrón y devolvería un 0 o un 1, pero el resultado de la substitución (si existiese) no sería tenido en cuenta porque no hay un lugar para colocarlo. Tales versiones de awk aceptas expresiones tales como esta:

sub(/USA/, "United States", "the USA and Canada")

Pero esa es considerada erronea en gawk.

gsub(regexp, replacement, target)

Esta es similar a la función sub, excepto que gsub reemplaza todas las concordancias que encuentre con la expresión regular, regexp (reemplaza varias concordancias en una misma línea o registro). El ‘g’ en gsub significa “global”, lo cual significa reemplazar en cualquier sitio. Por ejemplo:

awk '{ gsub(/Britain/, "United Kingdom"); print }'

reemplaza todas las ocurrencias de la cadena ‘Britain’ por ‘United Kingdom’ para todos los registros de entrada. La función gsub devuelve el número de substituciones realizadas. Si la variable a ser buscada y alterada, target, se omite, entonces se utiliza el registro de entrada completo, $0.

Como en sub, los caracteres `&' y `\' son especiales, y el tercer argumento debe ser un valori.

substr(string, start, length)

Esta función devuelve una subcadena de longitud length de string, empezando el el carácter número start. El primer carácter de una cadena es el carácter número 1. Por ejemplo, substr("washington", 5, 3) devuelve "ing".

Si no se especifica length, esta función devuelve el sufijo completo de cadena que comienza en el carácter número start. Por ejemplo, substr("washington", 5) devuelve "ington".

tolower(string)

Esto devuelve una copia de string, con cada carácter en mayúsculas de la cadena reemplazado por su correspondiente carácter en minúscula. Los caracteres no alfabéticos no son cambiados. Por ejemplo, tolower("MiXeD cAsE 123") devuelve "mixed case 123".

toupper(string)

Este devuelve una copia de string, con cada carácter en minúscula de la cadena reemplazado por su correspondiente carácter en mayúscula. Los caracteres no alfabéticos no son cambiados. Por ejemplo, toupper("MiXeD cAsE 123") devuelve "MIXED CASE 123".



















































































































Publicar un comentario

0 Comentarios