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

  • awk con datos csv
  • regex awk
  • regex AWK insensible a mayúsculas y minúsculas
  • awk con NF (número de campos) variable
  • Función gensub() awk
  • awk con función rand ()
  • función definida por el usuario awk
  • awk if
  • variables awk
  • awk arrays
  • AWK loop
  • awk para imprimir la primera columna
  • awk para imprimir la última columna
  • AWK con grep
  • awk con el archivo de script bash
  • awk con sed
  • 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

    1001 John Sena 40000
    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.

    employee awk ‘{ printf «%10s\n», employee 1 }’ empleado.txt

    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.

    $ echo ‘me gusta programar’ | awk ‘{ print $3 }’

    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

    +123:334:889:778
    +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.

    phone teléfono cat.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

    Client-side scripting language
    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.,

    AW awk ‘{ print} 1} ‘ FS=’\t’ input.txt

    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
    $ 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.

    customer Cliente cat.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.

    AW awk-F «,» ‘NR>1 {Imprimir «Nombre:» $ 2 «, Correo electrónico:» di 3 «, teléfono:» customer 4}’ cliente.csv

    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 ().

    awkcsv.awk
    BEGIN {FS=»,»} {printf «%5s (%s)\n», $2,$1}

    Ejecutar awkcsv.archivo awk con el contenido del cliente.archivo csv con el siguiente comando.

    $ awk -f awkcsv.cliente awk.,csv

    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.

    conjunto de caracteres coincidentes

    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á.

    $ printf «Tonto\nCool\nDoll\nbool» | awk ‘/ool/’

    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.,

    echo echo-e «Linux es de uso gratuito\n es un software de código abierto\nLinuxHint es
    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.,

    echo echo-e «PHP Script\Njavascript\nVisual Programming» | awk ‘/Script ‘

    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.

    print printf «Fool\nCool\nDoll\nbool» | awk ‘/OOL/’

    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.,

    echo echo-e «Diseño Web\nWeb development\nFramework» | awk ‘tolower (0 0) ~ /^web/;’

    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.

    input entrada cat.txt
    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 $0}
    {print «»}

    Ejecutar el script con el siguiente comando.

    count awk-F count.entrada awk.txt

    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:

    gensub (regexp, reemplazo, cómo)

    ejecute el siguiente comando para instalar el paquete gawk para usar la función getsub () con el comando awk.

    $ sudo apt-get install gawk

    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

    Mon 700000
    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.,

    $ awk ‘{ x=gensub(«\t»,»»,»G»,$2); printf x «+» } END{ print 0 }’ salesinfo.txt | bc -l

    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.

    AW awk ‘BEGIN {printf «Number is =%.2f\N», Rand () * 10}’

    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.

    area awk-F area.,awk

    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

    HDD Samsung Mouse 100
    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.

    items awk ‘{ if (if 3 == «») print «Price field is missing in line» NR }’ items.txt

    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.

    AW awk ‘{ if ($3 == «») print «Price field is missing»
    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.,

    BEGIN awk ‘BEGIN { print «Enter the mark:»
    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.

    AW awk ‘BEGIN{ site=» LinuxHint.,com»; print site} ‘

    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.

    AW awk ‘/ Printer / {name=$ 1;brand=$2;price=$3;print «item name=» name;
    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.,

    $ awk ‘BEGIN { n = 1; while (n <= 10) { if(n > 5) break; print n; n++ } }’

    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.,

    $ awk ‘BEGIN { sum=0; for (n = 1; n <= 10; n++) sum=sum+n; print sum} ‘

    Output:

    bucle Do-While:

    un bucle do-while del siguiente comando imprimirá todos los números pares del 10 al 5.,

    $ awk ‘BEGIN {contador = 10; do { if (contador%2 ==0) print contador; contador– }
    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

    Kaniz Fatema 30<sup>th</sup> batch
    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.,

    students awk ‘{print} 1}’ Estudiantes.txt

    ejecute el comando awk con el siguiente delimitador. Se imprimirá la parte completa de la primera columna.

    students awk-F ‘\\S\\S’ ‘{print 1 1}’ Estudiantes.txt

    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 ‘{print students(NF)}’ estudiantes.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 empleado de cat.txt
    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.

    customers clientes cat.txt
    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.

    employee empleado de cat.txt
    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.

    Articles

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *