Top 10 ejemplos AWK

Top 10 ejemplos AWK

20 ejemplos de AWK

Existen muchas herramientas de utilidad en el sistema operativo de Linux para buscar y generar un informe a partir de datos o archivo de texto. El usuario puede realizar fácilmente muchos tipos de búsqueda, reemplazo e informes de generación de tareas mediante el uso de comandos AWK, GREP y SED. Awk no es solo un comando. Es un lenguaje de secuencias de comandos que se puede usar desde el archivo Terminal y AWK. Admite la variable, la declaración condicional, la matriz, los bucles, etc. Como otros idiomas de secuencias de comandos. Puede leer cualquier archivo de contenido de archivo por línea y separar los campos o columnas en función de un delimitador específico. También admite la expresión regular para buscar una cadena particular en el contenido o archivo de texto y toma acciones si alguna coincidencia encuentra. Cómo puede usar el comando AWK y el script se muestra en este tutorial utilizando 20 ejemplos útiles.

Contenido:

  1. Awk con printf
  2. Awk a dividirse en espacio en blanco
  3. Awk para cambiar el delimitador
  4. AWK con datos delimitados
  5. Awk con datos de CSV
  6. AWK REGEX
  7. Regex insensible al caso AWK
  8. AWK con NF (número de campos) variable
  9. Función AWK Gensub ()
  10. awk con rand () función
  11. Función definida por el usuario de AWK
  12. Awk si
  13. Variables AWK
  14. matrices AWK
  15. AWK Loop
  16. Awk para imprimir la primera columna
  17. Awk para imprimir la última columna
  18. Awk con Grep
  19. Awk con el archivo de script bash
  20. Awk con sed

Usando AWK con printf

printf () La función se utiliza para formatear cualquier salida en la mayoría de los lenguajes de programación. Esta función se puede usar con asombrar Comando para generar diferentes tipos de salidas formateadas. Comando AWK utilizado principalmente para cualquier archivo de texto. Crear un archivo de texto llamado empleado.TXT con el contenido que se da a continuación donde los campos están separados por TAB ('\ t').

empleado.TXT

1001 John Sena 40000
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Hiver 70000

El siguiente comando AWK leerá datos de empleado.TXT Archivo Línea por línea e imprima el primero archivado después de formatear. Aquí, "%10s \ n"Significa que la salida tendrá 10 caracteres de largo. Si el valor de la salida es inferior a 10 caracteres, los espacios se agregarán en la parte delantera del valor.

$ AWK 'printf "%10s \ n", $ 1' Empleado.TXT

Producción:

Ir a contenido

Awk a dividirse en espacio en blanco

La palabra o separador de campo predeterminado para dividir cualquier texto es el espacio en blanco. El comando AWK puede tomar el valor del texto como entrada de varias maneras. El texto de entrada se pasa desde eco Comando en el siguiente ejemplo. El texto, 'Me gusta la programación'se dividirá por separador predeterminado, espacio, y la tercera palabra se imprimirá como salida.

$ echo 'me gusta la programación' | Awk 'imprimir $ 3'

Producción:

Ir a contenido

Awk para cambiar el delimitador

El comando AWK se puede usar para cambiar el delimitador para cualquier contenido de archivo. Supongamos que tiene un archivo de texto nombrado teléfono.TXT con el siguiente contenido donde ':' se usa como separador de campo del contenido del archivo.

teléfono.TXT

+123: 334: 889: 778
+880: 1855: 456: 907
+9: 7777: 38644: 808

Ejecute el siguiente comando AWK para cambiar el delimitador, ':' por '-' al contenido del archivo, teléfono.TXT.

$ Cat Teléfono.TXT
$ awk '$ 1 = $ 1' fs = ":" ofs = "-" teléfono.TXT

Producción:

Ir a contenido

AWK con datos delimitados

El comando AWK tiene muchas variables incorporadas que se utilizan para leer el texto de diferentes maneras. Dos de ellos son FS y De. FS es separador de campo de entrada y De es variables de separador de campo de salida. Los usos de estas variables se muestran en esta sección. Crear un pestaña archivo separado nombrado aporte.TXT con el siguiente contenido para probar los usos de FS y De variables.

Aporte.TXT

Lenguaje del lado del cliente
Lenguaje del lado del servidor
Servidor de base de datos
Servidor web

Uso de la variable FS con pestaña

El siguiente comando dividirá cada línea de aporte.TXT archivo basado en la pestaña ('\ t') e imprima el primer campo de cada línea.

$ awk 'imprimir $ 1' fs = '\ t' entrada.TXT

Producción:

Uso de la variable OFS con pestaña

El siguiente comando AWK imprimirá el 9th y 5th campos de 'ls -l' Salida del comando con separador de pestañas después de imprimir el título de la columna "Nombre" y "Tamaño". Aquí, De La variable se utiliza para formatear la salida por una pestaña.

$ ls -l
$ ls -l | AWK -V ofs = '\ t' 'begin printf "%s \ t%s \ n", "nombre", "tamaño" imprimir $ 9, $ 5'

Producción:

Ir a contenido

Awk con datos de CSV

El contenido de cualquier archivo CSV se puede analizar de varias maneras utilizando el comando AWK. Crear un archivo CSV llamado 'cliente.CSV'Con el siguiente contenido para aplicar el comando AWK.

cliente.TXT

ID, nombre, correo electrónico, teléfono
1, Sophia, [email protected], (862) 478-7263
2, Amelia, [email protected], (530) 764-8000
3, Emma, ​​[email protected], (542) 986-2390

Lectura de un solo campo de archivo CSV

'-F' La opción se usa con el comando AWK para establecer el delimitador para dividir cada línea del archivo. El siguiente comando AWK imprimirá el nombre campo de el cliente.CSV archivo.

$ CAT CATHER.CSV
$ awk -f "," 'imprimir $ 2' cliente.CSV

Producción:

Leer múltiples campos combinando con otro texto

El siguiente comando imprimirá tres campos de cliente.CSV combinando el texto del título, Nombre, correo electrónico y teléfono. La primera línea del cliente.CSV El archivo contiene el título de cada campo. Nr La variable contiene el número de línea del archivo cuando el comando AWK analiza el archivo. En este ejemplo, el nr La variable se usa para omitir la primera línea del archivo. La salida mostrará el 2Dakota del Norte, 3rd y 4th campos de todas las líneas excepto la primera línea.

$ awk -f "," 'nr> 1 imprimir "nombre:" $ 2 ", correo electrónico:" $ 3 ", teléfono:" $ 4' Cliente.CSV

Producción:

Lectura del archivo CSV usando un script AWK

El script AWK se puede ejecutar ejecutando el archivo AWK. Cómo puede crear el archivo AWK y ejecutar el archivo se muestra en este ejemplo. Crea un archivo llamado AWKCSV.asombrar Con el siguiente código. COMENZAR La palabra clave se usa en el script para informar el comando AWK para ejecutar el script del COMENZAR Parte primero antes de ejecutar otras tareas. Aquí, separador de campo (FS) se usa para definir la división delimitador y 2Dakota del Norte y 1calle Los campos se imprimirán de acuerdo con el formato utilizado en la función printf ().

AWKCSV.asombrar
Begin fs = "," printf "%5s (%s) \ n", $ 2, $ 1

Correr AWKCSV.asombrar archivo con el contenido de el cliente.CSV Archivo por el siguiente comando.

$ AWK -F AWKCSV.Cliente AWK.CSV

Producción:

Ir a contenido

AWK REGEX

La expresión regular es un patrón que se usa para buscar cualquier cadena en un texto. Diferentes tipos de tareas complicadas de búsqueda y reemplazo se pueden hacer muy fácilmente utilizando la expresión regular. Algunos usos simples de la expresión regular con el comando AWK se muestran en esta sección.

Juego de caracteres a juego

El siguiente comando coincidirá con la palabra Tonto o bool o Fresco con la cadena de entrada e imprima si la palabra encuentra. Aquí, Muñeca no coincidirá y no imprimirá.

$ printf "Fool \ ncool \ ndoll \ nbool" | awk '/[fbc] ool/'

Producción:

Buscar cadena al comienzo de la línea

'^' El símbolo se usa en la expresión regular para buscar cualquier patrón al comienzo de la línea. 'Linux ' Se buscará palabra al inicio de cada línea del texto en el siguiente ejemplo. Aquí, dos líneas comienzan con el texto, 'Linux'y esas dos líneas se mostrarán en la salida.

$ echo -e "Linux es gratuito de usar \ n Es un software de código abierto \ nlinuxhint IS
Un sitio de blog popular "| Awk '/^Linux/'

Producción:

Buscar cadena al final de la línea

ps El símbolo se usa en la expresión regular para buscar cualquier patrón al final de cada línea del texto. 'Guion'Se busca la palabra en el siguiente ejemplo. Aquí, dos líneas contienen la palabra, Guion Al final de la línea.

$ echo -e "script php \ njavaScript \ nVisual Programming" | Awk '/script $/'

Producción:

Buscando omitiendo un conjunto de caracteres particular

'^' El símbolo indica el inicio del texto cuando se usa frente a cualquier patrón de cadena (' /^... /') o antes de que cualquier personaje establecido declarado por ^[…]. Si el '^' El símbolo se usa dentro del tercer soporte, [^...] Entonces el conjunto de caracteres definido dentro del soporte se omitirá al momento de buscar. El siguiente comando buscará cualquier palabra que no esté comenzando con 'F' Pero terminando con 'ool'. Fresco y bool se imprimirá de acuerdo con el patrón y los datos de texto.

$ printf "Fool \ ncool \ ndoll \ nbool" | awk '/[^f] ool/'

Producción:

Ir a contenido

Regex insensible al caso AWK

Por defecto, la expresión regular hace una búsqueda sensible a mayúsculas. La búsqueda insensible al caso se puede realizar mediante el comando AWK con la expresión regular. En el siguiente ejemplo, reducir() la función se utiliza para realizar una búsqueda insensible. Aquí, la primera palabra de cada línea del texto de entrada se convertirá en minúsculas utilizando reducir() funcionar y coincidir con el patrón de expresión regular. toupper () La función también se puede utilizar para este propósito, en este caso, el patrón debe definirse por toda la letra mayúscula. El texto definido en el siguiente ejemplo contiene la palabra de búsqueda, 'web'En dos líneas que se imprimirán como salida.

$ echo -e "diseño web \ nweb desarrollo \ nframework" | AWK 'TOLOWER ($ 0) ~ /^web /;'

Producción:

Ir a contenido

AWK con NF (número de campos) variable

NF es una variable incorporada del comando AWK que se utiliza para contar el número total de campos en cada línea del texto de entrada. Cree cualquier archivo de texto con múltiples líneas y múltiples palabras. la entrada.TXT El archivo se usa aquí que se crea en el ejemplo anterior.

Usando NF desde la línea de comando

Aquí, el primer comando se usa para mostrar el contenido de aporte.TXT El archivo y el segundo comando se usan para mostrar el número total de campos en cada línea del archivo usando NF variable.

Input $ Cat.TXT
$ AWK 'print nf' Entrada.TXT

Producción:

Uso de NF en el archivo AWK

Crear un archivo AWK con nombre contar.asombrar con el script que se da a continuación. Cuando este script se ejecutará con cualquier datos de texto, cada contenido de línea con campos totales se imprimirá como salida.

contar.asombrar

Imprimir $ 0
imprimir "[Total Fields:" NF "]"

Ejecute el script por el siguiente comando.

$ awk -f cuenta.entrada AWK.TXT

Producción:

Ir a contenido

Función AWK Gensub ()

getSub () es una función de sustitución que se usa para buscar cadenas basada en delimitador particular o un patrón de expresión regular. Esta función se define en 'papar moscas' paquete que no está instalado de forma predeterminada. La sintaxis para esta función se da a continuación. El primer parámetro contiene el patrón de expresión regular o del delimitador de búsqueda, el segundo parámetro contiene el texto de reemplazo, el tercer parámetro indica cómo se realizará la búsqueda y el último parámetro contiene el texto en el que se aplicará esta función.

Sintaxis:

Gensub (regexp, reemplazo, cómo [, Target])

Ejecute el siguiente comando para instalar papar moscas Paquete para usar getSub () función con el comando AWK.

$ sudo apt-get install gawk

Crear un archivo de texto llamado 'ventaja.TXT'Con el siguiente contenido para practicar este ejemplo. Aquí, los campos están separados por una pestaña.

ventaja.TXT

Mon 700000
Martes 800000
Mié 750000
Jue 200000
Viernes 430000
Sábado 820000

Ejecute el siguiente comando para leer los campos numéricos del ventaja.TXT Archivo e imprima el total de todo el monto de las ventas. Aquí, el tercer parámetro, 'G' indica la búsqueda global. Eso significa que el patrón se buscará en el contenido completo del archivo.

$ awk 'x = gensub ("\ t", "", "g", $ 2); printf x "+" end print 0 'SalesInfo.txt | BC -L

Producción:

Ir a contenido

awk con rand () función

rand () La función se usa para generar cualquier número aleatorio mayor que 0 y menos de 1. Entonces, siempre generará un número fraccional inferior a 1. El siguiente comando generará un número aleatorio fraccional y multiplicará el valor con 10 para obtener un número más de 1. Se imprimirá un número fraccional con dos dígitos después de que se imprima el punto decimal para aplicar la función printf (). Si ejecuta el siguiente comando varias veces, obtendrá una salida diferente cada vez.

El número de $ AWK 'Begin printf "es =%.2f \ n ", rand ()*10 '

Producción:

Ir a contenido

Función definida por el usuario de AWK

Todas las funciones que se utilizan en los ejemplos anteriores son las funciones integradas. Pero puede declarar una función definida por el usuario en su script AWK para hacer cualquier tarea en particular. Supongamos que desea crear una función personalizada para calcular el área de un rectángulo. Para hacer esta tarea, cree un archivo llamado 'área.asombrar'Con el siguiente script. En este ejemplo, una función definida por el usuario nombró área() se declara en el script que calcula el área en función de los parámetros de entrada y devuelve el valor del área. obtener línea El comando se usa aquí para tomar la entrada del usuario.

área.asombrar

# Calculación del área
área de función (altura, ancho)
Altura de retorno*Ancho

# Inicia la ejecución
COMENZAR
Imprima "Ingrese el valor de la altura:"
Getline H < "-"
Imprima "Ingrese el valor de ancho:"
Getline w < "-"
Imprima el área "área =" (H, W)

Ejecutar el guión.

$ AWK -F Área.asombrar

Producción:

Ir a contenido

Awk si es un ejemplo

AWK admite declaraciones condicionales como otros lenguajes de programación estándar. Tres tipos de declaraciones IF se muestran en esta sección utilizando tres ejemplos. Crear un archivo de texto llamado elementos.TXT con el siguiente contenido.

elementos.TXT

HDD Samsung $ 100
Mouse a4tech
Impresora HP $ 200

Simple si es un ejemplo:

El siguiente comando leerá el contenido del elementos.TXT archivo y verificar el 3rd valor de campo en cada línea. Si el valor está vacío, se imprimirá un mensaje de error con el número de línea.

$ AWK 'if ($ 3 == "") El campo de imprenta "falta el campo en línea" nr' elementos.TXT

Producción:

Ejemplo if-else:

El siguiente comando imprimirá el precio del artículo si el 3rd El campo existe en la línea, de lo contrario, imprimirá un mensaje de error.

$ AWK 'if ($ 3 == "") Impresión "Falta el campo de precio"
de lo contrario, imprima "El precio del artículo es elementos" $ 3 '.TXT

Producción:

IF-Else-if Ejemplo:

Cuando el siguiente comando se ejecutará desde el terminal, tomará la entrada del usuario. El valor de entrada se comparará con cada una condición hasta que la condición sea verdadera. Si alguna condición se hace realidad, imprimirá la calificación correspondiente. Si el valor de entrada no coincide con ninguna condición, se imprimirá un fracaso.

$ awk 'begin imprimir "Ingrese la marca:"
Getline Mark < "-"
if (mark> = 90) imprima "a+"
else if (mark> = 80) imprima "a"
else if (mark> = 70) imprima "b+"
de lo contrario imprima "fallar" '

Producción:

Ir a contenido

Variables AWK

La declaración de la variable AWK es similar a la declaración de la variable de shell. Hay una diferencia en leer el valor de la variable. El símbolo de '$' se usa con el nombre de la variable para la variable de shell para leer el valor. Pero no hay necesidad de usar '$' con AWK variable para leer el valor.

Usando una variable simple:

El siguiente comando declarará una variable nombrada 'sitio' y se asigna un valor de cadena a esa variable. El valor de la variable se imprime en la siguiente declaración.

$ awk 'begin site = "Linuxhint.com "; sitio de impresión '

Producción:

Uso de una variable para recuperar datos de un archivo

El siguiente comando buscará la palabra 'Impresora' en el archivo elementos.TXT. Si alguna línea del archivo comienza con 'Impresora'Luego almacenará el valor de 1calle, 2Dakota del Norte y 3rd campos en tres variables. nombre y precio Se imprimirán las variables.

$ awk '/ imprinter/ name = $ 1; marca = $ 2; precio = $ 3; imprimir "nombre de artículo =" Nombre;
Imprimir "Price de artículo =" Price 'Artículos.TXT

Producción:

Ir a contenido

matrices AWK

Las matrices numéricas y asociadas se pueden usar en AWK. La declaración variable de matriz en AWK es la misma para otros lenguajes de programación. Algunos usos de las matrices se muestran en esta sección.

Matriz asociativa:

El índice de la matriz será cualquier cadena para la matriz asociativa. En este ejemplo, se declara e imprimen una matriz asociativa de tres elementos.

$ awk 'begin
libros ["diseño web"] = "aprendizaje html 5";
Libros ["Programación web"] = "Php y MySQL"
Libros ["Php Framework"] = "Learning Laravel 5"
printf "%s \ n%s \ n%s \ n", libros ["diseño web"], libros ["Programación web"],
Libros ["Php Framework"] '

Producción:

Matriz numérica:

Se declara e imprimen una matriz numérica de tres elementos separando la pestaña.

$ awk 'begin
número [0] = 80;
número [1] = 55;
número [2] = 76;

# Imprimir elementos de matriz
printf "Valores de matriz:%d \ t%d \ t%d \ n", número [0], número [1], número [2]; '

Producción:

Ir a contenido

AWK Loop

AWK respaldan tres tipos de bucles. Los usos de estos bucles se muestran aquí usando tres ejemplos.

Mientras que el bucle:

mientras que el bucle que se usa en el siguiente comando iterará por 5 veces y saldrá desde la declaración de bucle para romper.

$ awk 'begin n = 1; mientras (n 5) se rompa; imprimir n; n ++ '

Producción:

En bucle:

Para el bucle que se usa en el siguiente comando AWK calculará la suma de 1 a 10 e imprimirá el valor.

$ awk 'begin sum = 0; para (n = 1; n <= 10; n++) sum=sum+n; print sum '

Producción:

Do-While Loop:

Un bucle do-while del siguiente comando imprimirá todos los números pares de 10 a 5.

$ awk 'begin Counter = 10; do if (contador%2 == 0) contador de impresión; encimera--
while (contador> 5) '

Producción:

Ir a contenido

Awk para imprimir la primera columna

La primera columna de cualquier archivo se puede imprimir utilizando una variable de $ 1 en AWK. Pero si el valor de la primera columna contiene varias palabras, solo la primera palabra de la primera columna se imprime. Al usar un delimitador específico, la primera columna se puede imprimir correctamente. Crear un archivo de texto llamado estudiantes.TXT con el siguiente contenido. Aquí, la primera columna contiene el texto de dos palabras.

Estudiantes.TXT

Kaniz fatema 30th lote
Abir Hossain 35th lote
John Abraham 40th lote

Ejecutar el comando AWK sin delimitador. La primera parte de la primera columna se imprimirá.

$ AWK 'imprimir $ 1' Estudiantes.TXT

Ejecutar el comando AWK con el siguiente delimitador. La parte completa de la primera columna se imprimirá.

$ awk -f '\\ s \\ s' 'imprimir $ 1' Estudiantes.TXT

Producción:

Ir a contenido

Awk para imprimir la última columna

$ (NF) La variable se puede usar para imprimir la última columna de cualquier archivo. Los siguientes comandos AWK imprimirán la última parte y la parte completa de la última columna de los estudiantes.TXT archivo.

$ AWK 'imprimir $ (NF)' Estudiantes.TXT
$ awk -f '\\ s \\ s' 'print $ (nf)' estudiantes.TXT

Producción:

Ir a contenido

Awk con Grep

GREP es otro comando útil de Linux para buscar contenido en un archivo basado en cualquier expresión regular. La forma en que se pueden usar los comandos AWK y GREP juntos se muestra en el siguiente ejemplo. grep El comando se utiliza para buscar información de la identificación del empleado ','1002' de el empleado.TXT archivo. La salida del comando GREP se enviará a AWK como datos de entrada. El bono del 5% se contará e imprimirá en función del salario de la identificación del empleado ','1002 ' por comando AWK.

$ Cat Employee.TXT
$ GREP '1002' Empleado.txt | AWK -F '\ t' 'imprimir $ 2 "obtendrá $" ($ 3*5)/100 "Bonus"'

Producción:

Ir a contenido

Awk con archivo bash

Al igual que otro comando Linux, el comando AWK también se puede usar en un script bash. Crear un archivo de texto llamado clientes.TXT con el siguiente contenido. Cada línea de este archivo contiene información sobre cuatro campos. Estos son la identificación, el nombre, la dirección y el número de teléfono móvil del cliente que están separados por '/'.

clientes.TXT

AL4934 / Charles M Brunner / 4838 Beeghley Street, Huntsville, Alabama / 256-671-7942
CA5455 / Virginia S Mota / 930 Bassel Street, Vallecito, California / 415-679-5908
IL4855 / Ann A Neale / 1932 Patterson Fork Road, Chicago, Illinois / 773-550-5107

Crear un archivo bash llamado item_search.intento Con el siguiente script. Según este script, el valor de estado se tomará del usuario y se buscará en los clientes.TXT presentar por grep comando y pasado al comando AWK como entrada. El comando AWK se leerá 2Dakota del Norte y 4th campos de cada línea. Si el valor de entrada coincide con cualquier valor de estado de clientes.TXT archivo entonces imprimirá el de los clientes nombre y número de teléfono móvil, De lo contrario, imprimirá el mensaje "No se encuentra el cliente".

item_search.intento

#!/bin/bash
Echo "Ingrese el nombre de estado:"
Estado de lectura
clientes = 'GREP "$ State" CLIENTES.txt | AWK -F "/" 'imprimir "Nombre del cliente:" $ 2 ",,
Mobile No: "$ 4 ''
Si ["$ clientes" != ""]; entonces
hacer eco $ clientes
demás
echo "No se encontró el cliente"
FI

Ejecute los siguientes comandos para mostrar las salidas.

$ CAT CLIENTES.TXT
$ bash item_search.intento

Producción:

Ir a contenido

Awk con sed

Otra herramienta de búsqueda útil de Linux es sed. Este comando se puede usar tanto para buscar y reemplazar el texto de cualquier archivo. El siguiente ejemplo muestra el uso del comando AWK con sed dominio. Aquí, el comando SED buscará que todos los nombres de los empleados comiencen con 'J'y pasa al comando AWK como entrada. AWK imprimirá a los empleados nombre y IDENTIFICACIÓN Después de formatear.

$ Cat Employee.TXT
$ sed -n '/j/p' empleado.txt | AWK -F '\ t' 'printf "%s (%s) \ n", $ 2, $ 1'

Producción:

Ir a contenido

Conclusión:

Puede usar el comando AWK para crear diferentes tipos de informes basados ​​en cualquier datos tabulares o delimitados después de filtrar los datos correctamente. Espero que pueda aprender cómo funciona el comando AWK después de practicar los ejemplos que se muestran en este tutorial.