Nociones de programación en awk - Delimitadores de campos

5 - Delimitadores de campos

[editar]
Tutorial creado por Antonio Castro Snurmacher (Madrid 01/01/2000).. Extraido de: http://www.mononeurona.org/index.php?idp=462
27 de Octubre de 2005
No hemos tratado aun los campos de una línea. Una línea que tenga distintos campos debe usar alguna secuencia para delimitar los campos entre si.

Lo mismo para definir un delimitador que en cualquier otro caso donde se usen cadenas de caracteres podemos encontrarnos la necesidad de usar caracteres especiales que no pueden ser introducidos directamente. Para ello existen determinadas secuencias que empiezan por el carácter '\' y que tienen significado especial.

||
Caracteres de escape
||
|| \a || Produce un pitido en el terminal ||
|| \b || Retroceso ||
|| \f || Salto de página ||
|| \n || Salto de línea ||
|| \r || Retorno de carro ||
|| \t || Tabulador horizontal ||
|| \v || Tabulador vertical ||
|| \ddd || Carácter representado en octal por 'ddd' ||
|| \xhex || Carácter representado en hexadecimal por 'hex' ||
|| \c || Carácter 'c' ||


El último caso se usa para eliminar el significado especial de un carácter en determinadas circunstancias. Por ejemplo para usar un '+' o un '-' en una expresión regular usaríamos '\+' o '\-'

Podemos elegir un solo carácter para separar campos. Hay ficheros de configuración como /etc/passwd, /etc/group, que usan un solo carácter para delimitar los campos. Por ejemplo los dos puntos ':' , el blanco '\ ', la coma ',' el tabulador '\t' etc...

'awk' permite usar como delimitador más de un carácter. Para ello se asignará a la variable 'FS' una cadena de caracteres que contenga una expresión regular . Por ejemplo para usar como delimitador el carácter ':' habría que incluir 'BEGIN { FS = ":" }'

Si no se especifica ningún delimitador se asumirá que los campos estarán delimitados por uno o más blancos o tabuladores consecutivos lo cual se expresa como "[\ \t]+". Las expresiones regulares ya fueron estudiadas en un capítulo especial. El carácter '\' debe usarse para escapar cualquier carácter con significado especial en una expresión regular y algunos caracteres normales precedidos de '\' se usan para representar caracteres especiales. '\t' es el tabulador.

En 'awk' se usa $1 para referenciar el campo 1, $2 para referenciar el campo 2, etc... y para referenciar el registro completo usaremos $0.

Edite el siguiente fichero '/tmp/delim1.awk'

|| { print "+", $1, "+", $2, "+", $3, "+", $4, "+" } ||


$1, $2, $3, y $4 representan a los campos 1, 2, 3, y 4 respectivamente. Edite el siguiente fichero de datos '/tmp/delim1.dat'

|| aaa bbb ccc ddd eee 111 222 333 444 ||


En la primera línea debe introducir un blanco para separar los primeros blancos y una secuenciencia de ', , , ' para separar los dos últimos campos. Es importante que lo edite de esta forma porque el resultado de los ejemplos podría variar.

Ahora ejecute lo siguiente:

|| $ awk -f /tmp/delim1.awk /tmp/delim1.dat + aaa + bbb + ccc + ddd + + 111 + 222 + 333 + 444 + ||


Edite el siguiente fichero '/tmp/delim0.awk'

|| { print "+", $3, "+", $4, "+", $1, "+", $2, "+" } ||


Ahora ejecute lo siguiente:

|| $ awk -f /tmp/delim0.awk /tmp/delim1.dat + ccc + ddd + aaa + bbb + + 333 + 444 + 111 + 222 + ||


Con ello hemos conseguido variar el orden de aparición de los campos, pero todavía no hemos especificado ningún delimitador. Por ello hemos asumido el delimitador por defecto. (uno o más blancos y tabuladores). Para especificar un delimitador distinto tenemos que asignar su valor a la variable FS y además tenemos que hacerlo antes de leer el primero registro por lo cual se incluirá la instrucción en la sección inicial precedida de BEGIN.

Edite el siguiente fichero '/tmp/delim2.awk'

|| BEGIN { FS = "\ " } { print "+", $1, "+", $2, "+", $3, "+", $4, "+" } ||


Estamos definiendo un único carácter blanco como separador. Ahora ejecute lo siguiente:

|| $ awk -f /tmp/delim2.awk /tmp/delim1.dat + aaa + bbb + ccc + + + 111 + 222 + 333 + 444 + ||


Vamos a cambiar de delimitador. Edite el siguiente fichero '/tmp/delim3.awk'

|| BEGIN { FS = "\t" } { print "+", $1, "+", $2, "+", $3, "+", $4, "+" } ||


Estamos definiendo un único carácter tabulador como separador. Ahora ejecute lo siguiente:

|| $ awk -f /tmp/delim3.awk /tmp/delim1.dat + aaa bbb ccc + + ddd + + + 111 222 333 444 + + + + ||
[editar]

4 opiniones

bla,bla ,bla

no le entendi
no me ayudo

la informacion es muy poca no me sirve de nada
Mas o menos.

Hola me parece importante.
Operadores y expresiones.

No hay suficiente investigación.

Tutoriales relacionados con 'Nociones de programación en awk'

La palabra 'awk' se usa tanto para referirse a un lenguaje de manipulación de ficheros... Más »
Este documento Cómo está dedicado a todos los (pronto ex-)usuarios de DOS y Windows que... Más »

Autor y licencia de 'Nociones de programación en awk'


Tutorial de Antonio Castro Snurmacher (Madrid 01/01/2000).. Extraido de: http://www.mononeurona.org/index.php?idp=462 CopyLeft
Este trabajo está licenciado bajo la Creative Commons License. 1999-2005 © :: MonoNeurona.org ::
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.