existen muchas herramientas de utilidad en el sistema operativo Linux para buscar y generar un informe a partir de datos de texto o archivos. El usuario puede realizar fácilmente muchos tipos de tareas de búsqueda, sustitución y generación de informes mediante el uso de comandos awk, grep y sed. awk no es solo una orden. Es un lenguaje de scripting que se puede utilizar tanto desde el terminal como desde el archivo awk. Soporta la variable, sentencia condicional, matriz, bucles, etc. como otros lenguajes de scripting., Puede leer el contenido de cualquier archivo LÍNEA por línea y separar los campos o columnas en función de un delimitador específico. También admite expresiones regulares para buscar una cadena particular en el contenido de texto o archivo y toma acciones si se encuentra alguna coincidencia. En este tutorial se muestra cómo puede usar el comando y el script awk utilizando 20 ejemplos útiles.,a
utilizando awk con printf
la función printf() se utiliza para formatear cualquier salida en la mayoría de los lenguajes de programación., Esta función se puede utilizar con el comando awk para generar diferentes tipos de salidas formateadas. comando awk utilizado principalmente para cualquier archivo de texto. Cree un archivo de texto llamado empleado.txt con el contenido dado a continuación donde los campos están separados por tabulador (‘\t’).
empleado.txt
1002 Jafar Iqbal 60000
1003 Meher Nigar 30000
1004 Jonny Liver 70000
el siguiente comando awk leerá los datos del empleado.txt archivo LÍNEA por línea e imprimir el primer archivo después de formatear. Aquí, «%10s\n » significa que la salida tendrá 10 caracteres., Si el valor de la salida es inferior a 10 caracteres, los espacios se agregarán al frente del valor.
salida:
ir al contenido
awk para dividir en espacios en blanco
El separador de palabras o campos predeterminado para dividir cualquier texto es el espacio en blanco. el comando awk puede tomar el valor de texto como entrada de varias maneras. El texto de entrada se pasa desde el comando echo en el siguiente ejemplo., El texto, ‘I like programming’ se dividirá por separador predeterminado, espacio, y la tercera palabra se imprimirá como salida.
Salida:
Ir a Contenido
awk para cambiar el delimitador
awk comando se puede utilizar para cambiar el delimitador de cualquier archivo de contenido. Supongamos que tiene un archivo de texto llamado teléfono.txt con el siguiente contenido donde ‘: ‘se utiliza como separador de campo del contenido del archivo.
teléfono.,txt
+880:1855:456:907
+9:7777:38644:808
Ejecute el siguiente comando awk para cambiar el delimitador, ‘:’ por ‘-‘ para el contenido del archivo, teléfono.txt.
$ awk ‘$1=$1’ FS=»:» OFS=»-» el teléfono.txt
salida:
ir al contenido
awk con datos delimitados por tabuladores
el comando awk tiene muchas variables integradas que se utilizan para leer el texto de diferentes maneras. Dos de ellos son FS y OFS., FS es separador de campo de entrada y OFS es variables de separador de campo de salida. Los usos de estas variables se muestran en esta sección. Cree un archivo separado por tabulaciones llamado input.txt con el siguiente contenido para probar los usos de las variables FS y OFS.
entrada.txt
Server-side scripting language
Database Server
Web Server
usando la variable FS con la pestaña
el siguiente comando dividirá cada línea de entrada.archivo txt basado en la pestaña (‘\t’) e imprime el primer campo de cada línea.,
Output:
usando la variable OFS con tab
el siguiente comando awk imprimirá los campos 9 y 5 de la salida del comando ‘ls-l’ con separador de tabulación después de imprimir el título de la columna «Name» y «Size». Aquí, la variable OFS se utiliza para formatear la salida mediante una pestaña.,
$ ls -l | awk-v OFS=’\t’ ‘BEGIN { printf «%s\t%s\n», «Nombre», «Tamaño»} {print $9,$5}’
Salida:
Ir a Contenido
awk con datos CSV
El contenido de cualquier archivo CSV puede ser interpretado de varias maneras utilizando comando awk. Crear un archivo CSV llamado ‘ cliente.csv ‘ con el siguiente contenido para aplicar el comando awk.
cliente.txt
lectura de un solo campo del archivo CSV
la opción’-F’ Se usa con el comando awk para establecer el delimitador para dividir cada línea del archivo., El siguiente comando awk imprimirá el campo nombre del cliente.archivo csv.
AW awk-F», «‘{print 2 2} ‘ Cliente.csv
salida:
leer múltiples campos combinando con otro texto
el siguiente comando imprimirá tres campos del cliente.csv combinando texto de título, nombre, correo electrónico y teléfono. La primera línea del cliente.archivo csv contiene el título de cada campo. La variable NR contiene el número de línea del archivo cuando el comando awk analiza el archivo., En este ejemplo, la variable NR se utiliza para omitir la primera línea del archivo. La salida mostrará los campos 2nd, 3rd y 4th de todas las líneas excepto la primera línea.
salida:
la lectura del archivo CSV utilizando un script awk
el script awk se puede ejecutar ejecutando el archivo awk. En este ejemplo se muestra cómo puede crear un archivo awk y ejecutarlo. Crea un archivo llamado awkcsv.awk con el siguiente código., La palabra clave BEGIN se usa en el script para informar al comando awk de que ejecute el script de la parte BEGIN primero antes de ejecutar otras tareas. Aquí, el separador de campos (FS) se usa para definir el delimitador de división y los campos 2nd y 1st se imprimirán de acuerdo con el formato utilizado en la función printf ().
BEGIN {FS=»,»} {printf «%5s (%s)\n», $2,$1}
Ejecutar awkcsv.archivo awk con el contenido del cliente.archivo csv con el siguiente comando.
Resultado:
Ir a Contenido
awk regex
La expresión regular es un patrón que se utiliza para buscar cualquier cadena de texto. Diferentes tipos de tareas complicadas de búsqueda y reemplazo se pueden hacer muy fácilmente usando la expresión regular. Algunos usos simples de la expresión regular con el comando awk se muestran en esta sección.
el siguiente comando coincidirá con la palabra Fool o bool o Cool con la cadena de entrada e imprimirá si la palabra se encuentra., Aquí, la muñeca no coincidirá y no imprimirá.
Salida:
Buscar cadena en el inicio de la línea
‘^’ símbolo se utiliza en la expresión regular para buscar algún patrón en el punto de partida de la línea. La palabra ‘Linux’ se buscará al principio 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.,
un sitio de blog popular» | awk ‘/^Linux/’
salida:
la cadena de búsqueda al final de la línea
el símbolo’ symbol’ se usa en la expresión regular para buscar cualquier patrón al final de cada línea del texto. La palabra ‘Script’ se busca en el siguiente ejemplo. Aquí, dos líneas contienen la palabra, Script al final de la línea.,
Output:
buscar omitiendo un conjunto de caracteres particular
‘^ el símbolo’ indica el comienzo del texto cuando se utiliza delante de cualquier patrón de cadena ( ‘/ ^ ^ / ‘ ) o antes de cualquier conjunto de caracteres declarado por^. Si el símbolo ‘ ^ ‘ se usa dentro del tercer corchete, entonces el conjunto de caracteres definido dentro del corchete se omitirá en el momento de la búsqueda., El siguiente comando buscará cualquier palabra que no comience con ‘F’ pero termine con’ool’. Cool y bool se imprimirán de acuerdo con el patrón y los datos de texto.
salida:
ir al contenido
h3>
de forma predeterminada, la expresión regular hace una búsqueda sensible a mayúsculas y minúsculas al buscar cualquier patrón en la cadena. La búsqueda insensible a mayúsculas y minúsculas se puede realizar mediante el comando awk con la expresión regular., En el siguiente ejemplo, la función tolower () se utiliza para realizar búsquedas que no distinguen entre mayúsculas y minúsculas. Aquí, la primera palabra de cada línea del texto de entrada se convertirá a minúsculas usando la función tolower () y coincidirá con el patrón de expresión regular. la función toupper () también se puede usar para este propósito, en este caso, el patrón debe estar definido 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.,
salida:
ir al contenido
awk con NF (número de campos) variable
NF es una variable incorporada del comando AWK que se usa para contar el número total de campos en cada línea del texto de entrada. Cree CUALQUIER archivo de texto con varias líneas y varias palabras. entrada.aquí se usa el archivo txt que se creó en el ejemplo anterior.,
usando NF desde la línea de comandos
Aquí, el primer comando se usa para mostrar el contenido de la entrada.el archivo txt y el segundo comando se utilizan para mostrar el número total de campos en cada línea del archivo utilizando la variable NF.
AW awk’ {print NF} ‘ input.txt
salida:
usando NF en el archivo awk
crear un archivo awk llamado count.awk con el script que se muestra a continuación. Cuando este script se ejecute con cualquier dato de texto, cada contenido de línea con campos totales se imprimirá como salida.
cuenta.,awk
{print «»}
Ejecutar el script con el siguiente comando.
Output:
ir al contenido
awk gensub() function
getsub() es una función de sustitución que se utiliza para buscar cadenas basadas en un delimitador particular o un patrón de expresión regular. Esta función está definida en el paquete ‘gawk’ que no está instalado por defecto. La sintaxis para esta función se da a continuación., El primer parámetro contiene el patrón de expresión regular o 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:
ejecute el siguiente comando para instalar el paquete gawk para usar la función getsub () con el comando awk.
Crear un archivo de texto denominado ‘salesinfo.,txt’ con el siguiente contenido para practicar este ejemplo. Aquí, los campos están separados por una pestaña.
salesinfo.txt
Tue 800000
Wed 750000
Thu 200000
Vie 430000
Sat 820000
Ejecute el siguiente comando para leer los campos numéricos de la salesinfo.archivo txt e imprimir el total de todas las ventas. Aquí, el tercer parámetro, ‘G’ indica la búsqueda global. Eso significa que el patrón se buscará en todo el contenido del archivo.,
Resultado:
Ir a Contenido
awk con la función rand ()
función rand() se utiliza para generar cualquier número aleatorio mayor que 0 y menor que 1. Por lo tanto, siempre generará un número fraccionario menor que 1. El siguiente comando generará un número aleatorio fraccional y multiplicará el valor por 10 para obtener un número más que 1., Se imprimirá un número fraccionario con dos dígitos después del punto decimal para aplicar la función printf (). Si ejecuta el siguiente comando varias veces, obtendrá una salida diferente cada vez.
Output:
ir al contenido
awk función definida por el usuario
todas las funciones que se utilizan en los ejemplos anteriores son funciones integradas. Pero puede declarar una función definida por el usuario en su script awk para realizar 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.awk ‘ con el siguiente guión. En este ejemplo, se declara una función definida por el Usuario llamada area () en el script que calcula el área en función de los parámetros de entrada y devuelve el valor del área. el comando getline se usa aquí para tomar la entrada del usuario.
área.awk
ejecute el script.
Output:
ir al contenido
awk if example
awk soporta sentencias condicionales como otros lenguajes de programación estándar. En esta sección se muestran tres tipos de sentencias if utilizando tres ejemplos. Cree un archivo de texto con el nombre items.txt con el siguiente contenido.
items.txt
Mouse A4Tech
Printer HP HP 200
simple if example:
el siguiente comando leerá el contenido de los elementos.archivo txt y compruebe el valor del campo 3rd en cada línea., Si el valor está vacío, mostrará un mensaje de error con el número de línea.
Output:
if-else ejemplo:
el siguiente comando imprimirá el precio del artículo si el 3er campo existe en la línea, de lo contrario, imprimirá un mensaje de error.
else print «item price is» $3 }’ items.,txt
Resultado:
if-else-if ejemplo:
Cuando el siguiente comando para ejecutar desde el terminal, a continuación, se toma la entrada del usuario. El valor de entrada se comparará con cada condición if hasta que la condición sea verdadera. Si alguna condición se vuelve verdadera, entonces imprimirá la calificación correspondiente. Si el valor de entrada no coincide con ninguna condición, se imprimirá fail.,
getline mark < «-«
if (mark >= 90) print «a+»
else if( mark >= 80) print «a»
else if( Mark >= 70) print «b+»
ELSE PRINT «fail» }’
output:
ir al contenido
variables AWK
la declaración de la variable awk es similar a la declaración de la variable shell. Hay una diferencia en la lectura del valor de la variable., el símbolo ‘ $ ‘ se usa con el nombre de la variable para que la variable shell lea el valor. Pero no hay necesidad de usar ‘ $ ‘ con la variable awk para leer el valor.
usando simple variable:
el siguiente comando declarará una variable llamada ‘site’ y se asignará un valor de cadena a esa variable. El valor de la variable se imprime en la siguiente instrucción.
Output:
usando una variable para recuperar datos de un archivo
el siguiente comando buscará la palabra ‘Printer’ en los elementos del archivo.txt. Si cualquier línea del archivo comienza con ‘Printer’, almacenará el valor de los campos 1st, 2nd y 3rd en tres variables. se imprimirán las variables de nombre y precio.
print «item price=» price }’ items.,txt
salida:
ir al contenido
arrays awk
tanto los arrays numéricos como los Asociados se pueden utilizar en awk. La declaración de variables de Array en awk es la misma que en otros lenguajes de programación. Algunos usos de los arrays 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 imprime una matriz asociativa de tres elementos.,
salida:
matriz numérica:
se declara e imprime una matriz numérica de tres elementos separando tab.
Resultado:
Ir a Contenido
awk bucle
Tres tipos de bucles son apoyados por awk. Los usos de estos bucles se muestran aquí mediante el uso de tres ejemplos.
bucle While:
bucle while que se utiliza en el siguiente comando iterará 5 veces y saldrá de la instrucción loop for break.,
Salida:
bucle For:
bucle For que se utiliza en el siguiente comando awk calcule la suma de 1 a 10 y se imprime el valor.,
Output:
bucle Do-While:
un bucle do-while del siguiente comando imprimirá todos los números pares del 10 al 5.,
mientras (contador > 5) }’
Salida:
Ir a Contenido
awk para imprimir la primera columna
La primera columna de cualquier archivo se puede imprimir mediante el uso de $1 variable en awk. Pero si el valor de la primera columna contiene varias palabras, solo se imprime la primera palabra de la primera columna. Mediante el uso de un delimitador específico, la primera columna se puede imprimir correctamente. Cree un archivo de texto llamado students.,txt con el siguiente contenido. Aquí, la primera columna contiene el texto de dos palabras.
estudiantes.,txt
Abir Hossain 35<sup>th</sup> batch
John Abraham 40<sup>th</sup> batch
Run awk command without any delimiter. The first part of the first column will be printed.,
ejecute el comando awk con el siguiente delimitador. Se imprimirá la parte completa de la primera columna.
Resultado:
Ir a Contenido
awk para imprimir la última columna
$(NF) de la variable se puede utilizar 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.archivo txt.,
students awk-f ‘\\s\\s’ ‘{print print(NF)}’ estudiantes.txt
Resultado:
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. En el siguiente ejemplo se muestra cómo se pueden usar los comandos awk y grep juntos. el comando grep se usa para buscar información del ID de empleado, ‘1002’ del empleado.archivo txt. La salida del comando grep se enviará a awk como datos de entrada., El bono del 5% será contado e impreso basado en el salario de la identificación del empleado, ‘1002’ por awk command.
employee grep ‘1002’ empleado.txt / awk-F ‘\t’ ‘{ print 2 2 » obtendrá $» ($3*5)/100 «bonus»} ‘
salida:
ir al contenido
awk con archivo BASH
Al igual que otros comandos de Linux, el comando awk también se puede usar en un script BASH. Cree 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 el ID del cliente, Nombre, Dirección y número de teléfono móvil que están separados por’/’.
clientes.txt
crear un archivo bash llamado item_search.bash con el siguiente guión. De acuerdo con este script, el valor de estado se tomará del usuario y se buscará en los clientes.archivo txt por el comando grep y pasado al comando awk como entrada. El comando Awk leerá los campos 2nd y 4th de cada línea. Si el valor de entrada coincide con cualquier valor de estado de los clientes.archivo txt luego imprimirá el nombre del cliente y el número de teléfono móvil, de lo contrario, imprimirá el mensaje «no se encontró ningún cliente».,
item_search.bash
ejecute los siguientes comandos para mostrar las salidas.
bas bash item_search.bash
Resultado:
Ir a Contenido
awk con sed
Otra útil herramienta de búsqueda de Linux es sed. Este comando se puede usar tanto para buscar como para reemplazar texto de cualquier archivo. El siguiente ejemplo muestra el uso del comando awk con el comando sed. Aquí, el comando sed buscará todos los nombres de los empleados comienza con ‘ J ‘ y pasa al comando awk como entrada., awk imprimirá el nombre e ID del empleado después de formatear.
s sed-N’/J / p ‘ employee.txt / awk-F ‘\t’ ‘{ printf «% s (%s)\n», $2, $1 }’
salida:
ir al contenido
conclusión:
puede utilizar el comando awk para crear diferentes tipos de informes basados en cualquier información tabular o delimitada después de filtrar los datos correctamente. Esperanza, usted será capaz de aprender cómo funciona el comando awk después de practicar los ejemplos que se muestran en este tutorial.