Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
awk [2023/04/12 01:41] – peron | awk [2024/03/10 18:06] (actual) – peron | ||
---|---|---|---|
Línea 2: | Línea 2: | ||
**awk** es un lenguaje de análisis y procesado orientado a patrones de texto. Está diseñado para hacer sencilla las tareas de recopilación común de información y manipulación de texto. | **awk** es un lenguaje de análisis y procesado orientado a patrones de texto. Está diseñado para hacer sencilla las tareas de recopilación común de información y manipulación de texto. | ||
- | |||
- | La operación básica de awk es analizar un conjunto de líneas de **entrada** en orden buscando por // | ||
En la práctica, el uso de awk suele caer en dos amplias categorías. Una es la que podría considerarse **generación de informes**: esto implica el procesado de una entrada para extraer conteos, sumas, subtotales, etcétera. Esto también incluye la escritura de programas de validación de datos triviales, como la verificación de campos que contengan contiene únicamente información numérica o analizar si ciertos delimitadores están adecuadamente balanceados. | En la práctica, el uso de awk suele caer en dos amplias categorías. Una es la que podría considerarse **generación de informes**: esto implica el procesado de una entrada para extraer conteos, sumas, subtotales, etcétera. Esto también incluye la escritura de programas de validación de datos triviales, como la verificación de campos que contengan contiene únicamente información numérica o analizar si ciertos delimitadores están adecuadamente balanceados. | ||
Línea 9: | Línea 7: | ||
Una segunda categoría es su uso como **transformador de datos**, convirtiendo datos de la forma producida por un programa en la esperada por otro distinto. Los ejemplos más simples consisten en simplemente seleccionar campos, y tal vez reorganizarlos. | Una segunda categoría es su uso como **transformador de datos**, convirtiendo datos de la forma producida por un programa en la esperada por otro distinto. Los ejemplos más simples consisten en simplemente seleccionar campos, y tal vez reorganizarlos. | ||
- | >awk resulta invaluable para el el procesado textual y numérico combinado. | + | >awk resulta invaluable para el el procesado textual y numérico combinado. Fue creado por Aho, Weinberger y Kerningham en los [[Laboratorios Bell]], de allí su nombre. |
+ | ====Uso básico==== | ||
+ | |||
+ | La operación básica de awk es analizar un conjunto de líneas de **entrada** en orden buscando por // | ||
+ | |||
+ | El comando | ||
+ | <code awk>awk programa [ficheros]</ | ||
+ | ejecuta los comandos de awk de la cadena '' | ||
+ | |||
+ | <code awk>awk -f fichero_salida [ficheros]</ | ||
====Estructura de Programa de awk==== | ====Estructura de Programa de awk==== | ||
Línea 20: | Línea 27: | ||
A su turno, cada línea de //entrada// resulta analizada por awk contra cada // | A su turno, cada línea de //entrada// resulta analizada por awk contra cada // | ||
- | En cada declaración | + | Como en las declaraciones |
- | Naturalmente, las líneas | + | En cada declaración del programa pueden omitirse tanto el patrón como acción, pero no pueden omitirse ambas: |
+ | * Si la acción carece de patrón, la acción se ejecutará para todas las líneas | ||
+ | * Si un patrón carece de acción, la línea coincidente se devolverá como // | ||
- | Como en las declaraciones de awk tanto los patrones | + | Naturalmente, |
+ | Pueden disponerse comentarios en los programas de awk (los cuales también resultan filtrados). Estos comienzan con el carácter ''#'' | ||
+ | |||
+ | <code awk> | ||
+ | patron { acción } # Este es el comentario de la linea. | ||
+ | </ | ||
====Registros y Campos==== | ====Registros y Campos==== | ||
Línea 36: | Línea 50: | ||
Las variables '' | Las variables '' | ||
- | En caso que el separador de registro esté vacío, se considera como separador de registro por defecto | + | En caso que el separador de registro esté vacío, se considera como separador de registro por defecto a una //línea vacía//, y los // |
- | La variable '' | + | La variable '' |
- | ====Uso básico==== | + | |
- | Un ejemplo de un programa awk que imprime la tercera y segunda columna de una tabla en dicho orden: | ||
- | <code awk> | + | =====Patrones===== |
- | Este imprime todas las líneas | + | Un //patrón// en frente |
- | < | + | Como patrón podrán utilizarse una variedad de expresiones de control: [[# |
- | Este imprime todas las líneas en las cuales el primer campo es diferente que el primer campo previo: | + | ====Print==== |
- | <code awk>$2 ~/ | + | |
- | + | La acción más simple | |
- | + | ||
- | El comando | + | |
- | <code awk>awk programa [ficheros]</ | + | |
- | ejecuta los comandos de awk en la cadena '' | + | |
- | + | ||
- | <code awk>awk -f fichero_salida [ficheros]</ | + | |
- | + | ||
- | + | ||
- | ===Impresión=== | + | |
- | + | ||
- | Una acción puede carecer de patrón, en cuyo caso la acción se ejecutará para todas las líneas. | + | |
El siguiente comando imprime todas los registros, copiando la entrada a la salida de forma intacta. | El siguiente comando imprime todas los registros, copiando la entrada a la salida de forma intacta. | ||
Línea 81: | Línea 81: | ||
<code awk>{ print NR, NF, $0 }</ | <code awk>{ print NR, NF, $0 }</ | ||
- | La salida puede divirise | + | La salida puede dividiise |
<code awk>{ print $1 >" | <code awk>{ print $1 >" | ||
Línea 98: | Línea 98: | ||
envía por correo electrónico la salida a bwk. | envía por correo electrónico la salida a bwk. | ||
- | Las variables '' | + | Las variables '' |
Awk también provee a la declaración printf para formateado de salida, con esta sintaxis: | Awk también provee a la declaración printf para formateado de salida, con esta sintaxis: | ||
Línea 108: | Línea 108: | ||
<code awk> | <code awk> | ||
- | =====Patrones===== | ||
- | Un patrón en frente | + | ---- |
+ | Un ejemplo | ||
+ | |||
+ | <code awk>[print $3; $2]</ | ||
+ | |||
+ | Este imprime todas las líneas | ||
+ | |||
+ | < | ||
+ | |||
+ | Este imprime todas las líneas en las cuales el primer campo es diferente que el primer campo previo: | ||
+ | < | ||
Línea 158: | Línea 167: | ||
====Expresiones Relacionales de awk ==== | ====Expresiones Relacionales de awk ==== | ||
- | Los patrones de awk pueden ser expresiones relacionales que incluyan los operadores relacionales convencionales ''<'', | + | Los patrones de awk pueden ser expresiones relacionales que incluyan los [[operadores en unix# |
<code awk>NF % 2 == 0</ | <code awk>NF % 2 == 0</ | ||
Línea 176: | Línea 185: | ||
====Patrones Combinacionales==== | ====Patrones Combinacionales==== | ||
- | Un patrón puede ser cualquier | + | Un patrón puede ser cualquier |
Por ejemplo, este programa de awk selecciona las líneas donde un primer campo comienza con '' | Por ejemplo, este programa de awk selecciona las líneas donde un primer campo comienza con '' | ||
Línea 372: | Línea 381: | ||
La declaración '' | La declaración '' | ||
- | Pueden disponerse comentarios en los programas de awk: comienzan con el caracter ''#'' | ||
- | <code awk> | ||
- | print x, y # Esto es un comentario de línea. | ||
- | </ | ||