> For the complete documentation index, see [llms.txt](https://ricardev.gitbook.io/apuntes-linux/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ricardev.gitbook.io/apuntes-linux/apuntes-terminal/11-awk.md).

# 11- COMANDO AWK

Aproximación al comando AWK.

## **COMANDO AWK**

AWK es una herramienta de procesamiento de patrones en líneas de texto. Su utilización estándar es la de filtrar ficheros o salida de comandos de UNIX, tratando las líneas para, por ejemplo, mostrar una determinada información sobre las mismas.

### **FORMATO**

`awk '[opciones] { comandos }'`

### &#x20;OPCIONES

`-f` --> lee el codigo del fichero que se marque (nombre ruta)\
`-F` --> field separator. Cambia el separador (espacio por defecto)\
`-v var=VAL` --> Asigna el valor VAL a la variable var.\
`-d` --> muestra una lista de todas las variables. Puede servir para detectar errores tipograficos.

### &#x20;**VARIABLES DE COMANDO**

* **$0** --> Mostrar la línea completa
* **$1-$N** --> Mostrar los campos (columnas) de la línea especificados.
* **FS** --> Field Separator (" " por defecto)
* **FIELDWIDTHS** --> Longitud de los campos (por defecto no tiene valores definidos)
* **NF** --> Número de campos (fields) en el registro actual
* **$NF** --> Valor del ultimo campo de cada registro
* **FNR** --> Número de registro (records) que se está leyendo en el fichero que se está procesando
* **NR** --> Número de registros (records) que se esta leyendo en el stream a procesar.
* **OFS** --> Output Field Separator (" " por defecto).
* **ORS** --> Output Record Separator ("\n" por defecto).
* **RS** --> Input Record Separator ("\n" por defecto).
* **BEGIN** --> Define sentencias a ejecutar antes de empezar el procesado.
* **END** --> Define sentencias a ejecutar tras acabar el procesado.
* **length** --> Longitud de la línea en proceso.
* **FILENAME** --> Nombre del fichero en procesamiento.
* **ARGC** --> Número de parámetros de entrada al programa.
* **ARGV** --> Valor de los parámetros de entrada al programa.
* **ENVIRON** --> Es un array que contiene las variables de entorno (P.E: ENVIRON\["HOME"]
* **IGNORECASE** --> Ignora diferencia entre mayusculas y minusculas (Si su valor es =! 0)

### &#x20;**CONTROL DE FLUJO**

* `if ( expr ) statement`
* `if ( expr ) statement else statement`
* `while ( expr ) statement`
* `do statement while ( expr )`
* `for ( opt_expr ; opt_expr ; opt_expr ) statement`
* `for ( var in array ) statement`
* `continue, break`
* `(condicion)? a : b --> if(condicion) a else b;`
* `function (){contenido de funcion}`

### &#x20;**OPERADORES SOPORTADOS**

|  \* |  /  |  %  |  +  |  -  |  =  |     |
| :-: | :-: | :-: | :-: | :-: | :-: | :-: |
|  ++ |  -- |  += |  -= | \*= |  /= |  %= |

### &#x20;**FUNCIONES INTERNAS**

* toupper() --> pone el contenido de la variable en mayusculas.
* tolower() --> pone el contenido de la variable en minuscula.
* lenght() --> indica la longitud de cada uno de los registros (en numero de caracteres)
* close(fichero\_a\_reiniciar\_desde\_cero)
* cos(x)
* sin(x)
* index()
* int(num)
* substr(str,pos,len)
* system(orden\_del\_sistema\_a\_ejecutar)
* printf() --> permite imprimir por pantalla incluyendo contenido de variables:
* %s --> string de texto
* %c --> salida numérica de cadena de string
* %d --> valor numerico entero
* %f --> valor decimal
