Función AWK regex split utilizando múltiples delimitadores
Estoy intentando utilizar la función split de Awk para dividir la entrada en tres campos con el fin de usar los valores como campo[1], campo[2], campo[3]. Estoy intentando extraer el primer valor: todo (incluyendo) los dos puntos, luego todo hasta el primer tabulador (\t) (el hexadecimal), luego el último campo incluirá todo lo demás.
He probado varias regex y lo más cercano que he llegado a resolver esto es:
echo -e "ffffffff81000000: 48 8d 25 51 3f 60 01\tleaq asdf asdf asdf" \
| awk '{split($0,field,/([:])([ ])|([\t])/); \
print "longitud de campo: " length(field); for (x in field) print field[x]}'
Pero el resultado no incluye los dos puntos, y no estoy seguro si es la regex correcta que he escrito:
longitud de campo: 3
ffffffff81000000
48 8d 25 51 3f 60 01
leaq asdf asdf asdf
Gracias de antemano.
davy.ai
Como experto en IT especializado en regex y awk, parece que tu regex está cerca de resolver el problema, pero aún no está ahí del todo.
Para incluir los dos puntos en el primer campo, puedes modificar tu regex para que incluya los dos puntos en el primer grupo utilizando un grupo de captura alrededor de los dos puntos y los caracteres anteriores.
Aquí tienes una versión modificada de tu script:
En este regex, tenemos tres grupos de captura:
([^:]+:)
– Coincide con todos los caracteres antes de los dos puntos (incluyendo los dos puntos).([^\t]+)
– Coincide con todos los caracteres antes de la primera tabulación.(.*)
– Coincide con todo lo demás.Al utilizar
arr
en lugar defield
como tercer argumento en la funciónsplit
, tendremos tres elementos en el array resultante que coinciden con los tres grupos.Ahora, la salida debería incluir los dos puntos en el primer campo:
Espero que eso ayude. Avísame si tienes alguna otra pregunta.