Cómo usar el comando awk en Linux

En Linux, awk es un dinamo de manipulación de texto de línea de comandos, así como un potente lenguaje de scripting. Aquí hay una introducción a algunas de sus características más geniales.

Cómo awk obtuvo su nombre

El awk Command fue nombrado usando las iniciales de las tres personas que escribieron la versión original en 1977: Alfredo Aho, Pedro Weinbergery Brian Kernighan. Estos tres hombres eran de la legendaria AT&T Laboratorios Bell Panteón Unix. Con las aportaciones de muchos otros desde entonces, awk ha seguido evolucionando.

Es un lenguaje de scripting completo, así como un kit de herramientas completo de manipulación de texto para la línea de comandos. Si este artículo te abre el apetito, puedes echa un vistazo a cada detalle acerca de awk y su funcionalidad.

Reglas, patrones y acciones

awk trabaja en programas que contienen reglas compuestas por patrones y acciones. La acción se ejecuta en el texto que coincide con el patrón. Los patrones están encerrados en tirantes rizados ({}). Juntos, un patrón y una acción forman una regla. Todo el awk el programa está entre comillas simples (').

Echemos un vistazo al tipo más simple de awk programa. No tiene patrón, por lo que coincide con cada línea de texto que se introduce en él. Esto significa que la acción se ejecuta en cada línea. Vamos a Utilíselo en la salida de el who mandar.

Aquí está la salida estándar de who:

who

Tal vez no necesitemos toda esa información, sino que, más bien, solo queremos ver los nombres en las cuentas. Podemos canalizar la salida desde who en awky, a continuación, decir awk para imprimir sólo el primer campo.

De forma predeterminada, awk considera que un campo es una cadena de caracteres rodeados por espacios en blanco, el comienzo de una línea o el final de una línea. Los campos se identifican con un signo de dólar () y un número. Así que €1 representa el primer campo, que usaremos con el print acción para imprimir el primer campo.

Escribimos lo siguiente:

who | awk '{print €1}'

awk imprime el primer campo y descarta el resto de la línea.

Podemos imprimir tantos campos como queramos. Si añadimos una coma como separador, awk imprime un espacio entre cada campo.

Escribimos lo siguiente para imprimir también la hora en que la persona inició sesión (campo cuatro):

who | awk '{print €1,€4}'

Hay un par de identificadores de campo especiales. Estos representan toda la línea de texto y el último campo de la línea de texto:

  • US€ 0: representa toda la línea de texto.
  • US€ 1: representa el primer campo.
  • US€ 2: representa el segundo campo.
  • US€ 7: representa el séptimo campo.
  • US€ 45: representa el campo 45.
  • €NF: Significa “número de campos” y representa el último campo.

Escribiremos lo siguiente para que aparece un pequeño archivo de texto que contiene una breve cita atribuida a Dennis Ritchie:

cat dennis_ritchie.txt

Queremos awk para imprimir el primer, segundo y último campo de la cotización. Tenga en cuenta que aunque está envuelto en la ventana del terminal, es solo una sola línea de texto.

Escribimos el siguiente comando:

awk '{print €1,€2,€NF}' dennis_ritchie.txt

No sabemos que la “simplicidad” es el campo número 18 en la línea de texto, y no nos importa. Lo que sí sabemos es que es el último campo, y podemos usar €NF para obtener su valor. El período se considera un personaje más en el cuerpo del campo.

Adición de separadores de campo de salida

También se puede decir awk para imprimir un carácter determinado entre campos en lugar del carácter de espacio predeterminado. El resultado predeterminado de la date el comando es ligeramente peculiar porque el tiempo está arado justo en el medio de él. Sin embargo, podemos escribir lo siguiente y usar awk para extraer los campos que queremos:

date
date | awk '{print €2,€3,€6}'

Usaremos el OFS (separador de campo de salida) variable para poner un separador entre el mes, el día y el año. Tenga en cuenta que a continuación adjuntamos el comando entre comillas simples ('), no aparatos ortopédicos rizados ({}):

date | awk 'OFS="https://www.howtogeek.com/" {print€2,€3,€6}'
date | awk 'OFS="-" {print€2,€3,€6}'

Las reglas BEGIN y END

Un BEGIN la regla se ejecuta una vez antes de que se inicie cualquier procesamiento de texto. De hecho, se ejecuta antes awk incluso lee cualquier texto. Un END la regla se ejecuta después de que se haya completado todo el procesamiento. Puede tener varios BEGIN y END reglas, y se ejecutarán en orden.

Para nuestro ejemplo de un BEGIN regla, imprimiremos la cita completa del dennis_ritchie.txt archivo que usamos anteriormente con un título encima.

Para ello, escribimos este comando:

awk 'BEGIN {print "Dennis Ritchie"} {print €0}' dennis_ritchie.txt

Tenga en cuenta el BEGIN La regla tiene su propio conjunto de acciones encerradas dentro de su propio conjunto de llaves rizadas ({}).

Podemos usar esta misma técnica con el comando que usamos anteriormente para canalizar la salida de who en awk. Para ello, escribimos lo siguiente:

who | awk 'BEGIN {print "Active Sessions"} {print €1,€4}'

Separadores de campo de entrada

Si quieres awk para trabajar con texto que no utiliza espacios en blanco para separar campos, debe indicarle qué carácter utiliza el texto como separador de campos. Por ejemplo, el /etc/passwd el archivo utiliza dos puntos (:) para separar los campos.

Usaremos ese archivo y el -F (cadena separadora) opción para decir awk para utilizar los dos puntos (:) como separador. Escribimos lo siguiente para contar awk para imprimir el nombre de la cuenta de usuario y la carpeta de inicio:

awk -F: '{print €1,€6}' /etc/passwd

El resultado contiene el nombre de la cuenta de usuario (o nombre de la aplicación o demonio) y la carpeta de inicio (o la ubicación de la aplicación).

Adición de patrones

Si todo lo que nos interesa son las cuentas de usuario regulares, podemos incluir un patrón con nuestra acción de impresión para filtrar todas las demás entradas. Porque ID de usuario los números son iguales o mayores que 1.000, podemos basar nuestro filtro en esa información.

Te puede ser útil:  Cómo instalar aplicaciones de Android y compartir contactos usando códigos QR

Escribimos lo siguiente para ejecutar nuestra acción de impresión solo cuando el tercer campo (€3) contiene un valor de 1.000 o superior:

awk -F: '€3 >= 1000 {print €1,€6}' /etc/passwd

El patrón debe preceder inmediatamente a la acción con la que está asociado.

Podemos utilizar el BEGIN regla para proporcionar un título para nuestro pequeño informe. Escribimos lo siguiente, usando el (/n) para insertar un carácter newline en la cadena de título:

awk -F: 'BEGIN {print "User Accounts/n-------------"} €3 >= 1000 {print €1,€6}' /etc/passwd

Los patrones son completos expresiones regulares, y son una de las glorias de awk.

Digamos que queremos ver los identificadores únicos universales (UUID) de los sistemas de archivos montados. Si buscamos a través del /etc/fstab para las apariciones de la cadena “UUID”, debería devolver esa información para nosotros.

Utilizamos el patrón de búsqueda “/UUID/” en nuestro comando:

awk '/UUID/ {print €0}' /etc/fstab

Encuentra todas las apariciones de “UUID” e imprime esas líneas. De hecho, habríamos obtenido el mismo resultado sin el print porque la acción predeterminada imprime toda la línea de texto. Sin embargo, para mayor claridad, a menudo es útil ser explícito. Cuando miras a través de un script o tu archivo de historial, te alegrarás de haber dejado pistas para ti.

La primera línea encontrada fue una línea de comentario, y aunque la cadena “UUID” está en el medio, awk todavía lo encontré. Podemos ajustar la expresión regular y decir awk para procesar sólo líneas que comienzan con “UUID”. Para ello, escribimos lo siguiente que incluye el token de inicio de línea (^):

awk '/^UUID/ {print €0}' /etc/fstab

¡Eso está mejor! Ahora, solo vemos instrucciones de montaje genuinas. Para refinar aún más la salida, escribimos lo siguiente y restringimos la visualización al primer campo:

awk '/^UUID/ {print €1}' /etc/fstab

Si tuviéramos varios sistemas de archivos montados en esta máquina, obtendríamos una tabla ordenada de sus UUID.

Funciones integradas

awk tiene muchas funciones que puede llamar y utilizar en sus propios programas, tanto desde la línea de comandos como en scripts. Si haces un poco de excavación, lo encontrarás muy fructífero.

Para demostrar la técnica general para llamar a una función, veremos algunas numéricas. Por ejemplo, lo siguiente imprime la raíz cuadrada de 625:

awk 'BEGIN { print sqrt(625)}'

Este comando imprime la arcotangente de 0 (cero) y -1 (que resulta ser la constante matemática, pi):

awk 'BEGIN {print atan2(0, -1)}'

En el siguiente comando, modificamos el resultado de la atan2() antes de imprimirlo:

awk 'BEGIN {print atan2(0, -1)*100}'

Las funciones pueden aceptar expresiones como parámetros. Por ejemplo, aquí hay una forma enrevesada de pedir la raíz cuadrada de 25:

awk 'BEGIN { print sqrt((2+3)*5)}'

Scripts awk

Si su línea de comandos se complica, o desarrolla una rutina que sabe que querrá usar nuevamente, puede transferir su awk en un script.

En nuestro script de ejemplo, vamos a hacer todo lo siguiente:

  • Indique al shell qué ejecutable usar para ejecutar el script.
  • Preparar awk Para utilizar el FS variable separadora de campos para leer texto de entrada con campos separados por dos puntos (:).
  • Utilice el OFS separador de campo de salida para decir awk para utilizar dos puntos (:) para separar los campos de la salida.
  • Establezca un contador en 0 (cero).
  • Establezca el segundo campo de cada línea de texto en un valor en blanco (siempre es una “x”, por lo que no necesitamos verlo).
  • Imprima la línea con el segundo campo modificado.
  • Incrementar el contador.
  • Imprima el valor del contador.

Nuestro script se muestra a continuación.

El BEGIN la regla lleva a cabo los pasos preparatorios, mientras que el END rule muestra el valor del contador. La regla intermedia (que no tiene nombre ni patrón, por lo que coincide con cada línea) modifica el segundo campo, imprime la línea e incrementa el contador.

La primera línea del script le dice al shell qué ejecutable usar (awk, en nuestro ejemplo) para ejecutar el script. También pasa el -f (nombre de archivo) opción a awk, que le informa que el texto que va a procesar provendrá de un archivo. Pasaremos el nombre de archivo al script cuando lo ejecutemos.

Hemos incluido el script a continuación como texto para que pueda cortar y pegar:

#!/usr/bin/awk -f

BEGIN {
  # set the input and output field separators
  FS=":"
  OFS=":"
  # zero the accounts counter
  accounts=0
}
{
  # set field 2 to nothing
  €2=""
  # print the entire line
  print €0
  # count another account
  accounts++
}
END {
  # print the results
  print accounts " accounts./n"
}

Guarde esto en un archivo llamado omit.awk. Para Hacer que el ejecutable de secuencia de comandose, escribimos lo siguiente usando chmod:

chmod +x omit.awk

Ahora, lo ejecutaremos y pasaremos el /etc/passwd al script. Este es el archivo awk procesará por nosotros, utilizando las reglas dentro del script:

./omit.awk /etc/passwd

El archivo se procesa y se muestra cada línea, como se muestra a continuación.

Las entradas “x” en el segundo campo se eliminaron, pero tenga en cuenta que los separadores de campos todavía están presentes. Las líneas se cuentan y el total se da en la parte inferior de la salida.

awk no representa incómodo

awk no es sinónimo de incómodo; representa la elegancia. Se ha descrito como un filtro de procesamiento y un escritor de informes. Más exactamente, son ambos, o, más bien, una herramienta que puede usar para ambas tareas. En pocas líneas, awk logra lo que requiere una codificación extensa en un lenguaje tradicional.

Ese poder es aprovechado por el concepto simple de reglas que contienen patrones, que seleccionan el texto a procesar y acciones que definen el procesamiento.

¿Qué tan útil te resultó el artículo?

¡Haz click en una estrella para valorar!

Valoración media / 5. Votos totales:

¡No hay votos hasta ahora! Sé el primero en valorar este artículo.

Utilizamos cookies para personalizar el contenido y los anuncios, para ofrecer funciones de redes sociales y para analizar nuestro tráfico. También compartimos información sobre su uso de nuestro sitio con nuestros socios de redes sociales, publicidad y análisis. View more
Cookies settings
Aceptar
Política de privacidad y cookies
Privacy & Cookies policy
Cookie name Active
El presente Política de Privacidad establece los términos en que Alternativa.click usa y protege la información que es proporcionada por sus usuarios al momento de utilizar su sitio web. Esta compañía está comprometida con la seguridad de los datos de sus usuarios. Cuando le pedimos llenar los campos de información personal con la cual usted pueda ser identificado, lo hacemos asegurando que sólo se empleará de acuerdo con los términos de este documento. Sin embargo esta Política de Privacidad puede cambiar con el tiempo o ser actualizada por lo que le recomendamos y enfatizamos revisar continuamente esta página para asegurarse que está de acuerdo con dichos cambios.

Información que es recogida

Nuestro sitio web podrá recoger información personal por ejemplo: Nombre,  información de contacto como  su dirección de correo electrónica e información demográfica. Así mismo cuando sea necesario podrá ser requerida información específica para procesar algún pedido o realizar una entrega o facturación.

Uso de la información recogida

Nuestro sitio web emplea la información con el fin de proporcionar el mejor servicio posible, particularmente para mantener un registro de usuarios, de pedidos en caso que aplique, y mejorar nuestros productos y servicios.  Es posible que sean enviados correos electrónicos periódicamente a través de nuestro sitio con ofertas especiales, nuevos productos y otra información publicitaria que consideremos relevante para usted o que pueda brindarle algún beneficio, estos correos electrónicos serán enviados a la dirección que usted proporcione y podrán ser cancelados en cualquier momento. Alternativa.click está altamente comprometido para cumplir con el compromiso de mantener su información segura. Usamos los sistemas más avanzados y los actualizamos constantemente para asegurarnos que no exista ningún acceso no autorizado.

Cookies

Una cookie se refiere a un fichero que es enviado con la finalidad de solicitar permiso para almacenarse en su ordenador, al aceptar dicho fichero se crea y la cookie sirve entonces para tener información respecto al tráfico web, y también facilita las futuras visitas a una web recurrente. Otra función que tienen las cookies es que con ellas las web pueden reconocerte individualmente y por tanto brindarte el mejor servicio personalizado de su web. Nuestro sitio web emplea las cookies para poder identificar las páginas que son visitadas y su frecuencia. Esta información es empleada únicamente para análisis estadístico y después la información se elimina de forma permanente. Usted puede eliminar las cookies en cualquier momento desde su ordenador. Sin embargo las cookies ayudan a proporcionar un mejor servicio de los sitios web, estás no dan acceso a información de su ordenador ni de usted, a menos de que usted así lo quiera y la proporcione directamente. Usted puede aceptar o negar el uso de cookies, sin embargo la mayoría de navegadores aceptan cookies automáticamente pues sirve para tener un mejor servicio web. También usted puede cambiar la configuración de su ordenador para declinar las cookies. Si se declinan es posible que no pueda utilizar algunos de nuestros servicios.

Enlaces a Terceros

Este sitio web pudiera contener en laces a otros sitios que pudieran ser de su interés. Una vez que usted de clic en estos enlaces y abandone nuestra página, ya no tenemos control sobre al sitio al que es redirigido y por lo tanto no somos responsables de los términos o privacidad ni de la protección de sus datos en esos otros sitios terceros. Dichos sitios están sujetos a sus propias políticas de privacidad por lo cual es recomendable que los consulte para confirmar que usted está de acuerdo con estas. Control de su información personal En cualquier momento usted puede restringir la recopilación o el uso de la información personal que es proporcionada a nuestro sitio web.  Cada vez que se le solicite rellenar un formulario, como el de alta de usuario, puede marcar o desmarcar la opción de recibir información por correo electrónico.  En caso de que haya marcado la opción de recibir nuestro boletín o publicidad usted puede cancelarla en cualquier momento. Esta compañía no venderá, cederá ni distribuirá la información personal que es recopilada sin su consentimiento, salvo que sea requerido por un juez con un orden judicial. Alternativa.click Se reserva el derecho de cambiar los términos de la presente Política de Privacidad en cualquier momento.
Save settings
Cookies settings