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:
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 40000El 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.TXTProducció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: 778Ejecute el siguiente comando AWK para cambiar el delimitador, ':' por '-' al contenido del archivo, teléfono.TXT.
$ Cat Teléfono.TXTProducció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 clienteEl 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:
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éfonoLectura 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:
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:
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.asombrarCorrer 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:
'^' 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:
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:
'^' 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.TXTProducción:
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 $ 0Ejecute 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 gawkCrear 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 700000Ejecute 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 áreaEjecutar 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 $ 100Simple 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:
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"Producción:
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.
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:
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;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.
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:
Se declara e imprimen una matriz numérica de tres elementos separando la pestaña.
$ awk 'beginProducció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 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:
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:
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 loteEjecutar 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-7942Crear 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".
#!/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
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.