Pregunta

Constantemente aprendo nuevas herramientas, incluso las antiguas, porque me gusta utilizar la solución adecuada al problema.

Sin embargo, me pregunto si todavía hay alguna razón para aprender algunos de ellos. awk por ejemplo, es interesante para mí, pero para el procesamiento de texto simple, puedo usar grep, cut, sed, etc.mientras que para los complejos, optaré por Python.

Ahora bien, no quiero decir que no sea una herramienta poderosa y útil.Pero como se necesita tiempo y energía para aprender una nueva herramienta, vale la pena ?

¿Fue útil?

Solución

Creo que depende del entorno en el que te encuentres.Si eres una persona *nix, entonces saber awk es algo bueno.El único otro entorno de scripting que se puede encontrar en prácticamente todos los *nix es sh.Así que mientras grep, sed, etc. seguramente puede reemplazar awk en una corriente principal moderna linux distro, cuando pasas a sistemas más exóticos, saber un poco awk va a ser muy útil.

awk También se puede utilizar para algo más que el procesamiento de texto.Por ejemplo, uno de mis supervisores escribe código de astronomía en awk - así de completamente vieja escuela y impresionante él es.En su época, era la mejor herramienta para el trabajo...y ahora, aunque sus alumnos como yo usamos Python y otras cosas, él se apega a lo que sabe y funciona bien.

Para terminar, hay muchos códigos antiguos circulando por todo el mundo, conociendo un poco awk no va a doler.También te hará mejor *nix persona :-)

Otros consejos

Si aprende rápidamente los conceptos básicos de awk, podrá hacer cosas increíbles en la línea de comando.

Pero el real La razón para aprender awk es tener una excusa para leer el magnífico libro El lenguaje de programación AWK por sus autores Aho, Kernighan y Weinberger.Pensarías, por el nombre, que simplemente te enseña algo extraño.En realidad, eso es sólo el comienzo.Al abordar la amplia gama de problemas que se pueden abordar una vez que se utiliza un lenguaje de programación conciso que facilita la manipulación de cadenas (y awk fue uno de los primeros), procede a enseñar al lector cómo implementar una base de datos, un analizador, un intérprete. y (si la memoria no me falla) ¡un compilador para un pequeño lenguaje informático específico para proyectos!Si también hubieran programado un sistema operativo de ejemplo usando awk, ¡el libro habría sido una introducción bastante completa a la informática!

Famosamente claro y conciso, como el libro original en lenguaje C, también es un maravilloso ejemplo de escritura técnica amigable bien hecha.Incluso el índice es una pieza de artesanía.

¿Mal?Si lo sabe, lo usará ocasionalmente en la línea de comandos, pero para algo más grande se sentirá atrapado, incapaz de acceder a las funciones más amplias de su sistema y de Internet a las que algo como Python proporciona acceso.¿Pero el libro?¡Siempre te alegrarás de leerlo!

La única razón por la que uso awk es la división automática:

awk '{print $3}' < file.in

Esto imprime el tercer campo delimitado por espacios en blanco en file.in.Es un poco más fácil que:

tr -s ' ' < file.in | cut -d' ' -f3

Creo que awk es genial si tu archivo contiene columnas/campos.Lo uso al procesar/analizar una columna particular en un archivo de varias columnas.O si quiero agregar/eliminar una o más columnas en particular.

p.ej.

awk -F \t '{ if ($2 > $3) print; }' <filename>

se imprimirá solo si el valor de la segunda columna en un archivo separado por tabulaciones es mayor que el valor de la tercera columna.

Por supuesto que podría usar Perl o Python, pero awk lo hace mucho más simple con un comando conciso de una sola línea.

Además, aprender awk tiene un costo bastante bajo.Puedes aprender los conceptos básicos de awk en menos de una hora, por lo que no supone tanto esfuerzo como aprender cualquier otro lenguaje de programación/scripting.

Utilizo AWK ocasionalmente para trabajar con HTML.Por ejemplo, este código traduce tablas a archivos csv:

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

Lo cual es genial si estás haciendo screen scraping.En realidad, podría darse el caso de que me encanta AWK porque me permite crear la solución equivocada a los problemas muy rápidamente :) más ejemplos.También se menciona en el encantador libro de Jon Bentley. Perlas de programación.

Utilizo awk de vez en cuando.Es bueno para texto muy simple que se mezcla en medio de una tubería;Llena un nicho muy estrecho justo entre no necesitarlo en absoluto y tener que sacar Perl/Python/lo que sea.

No te recomendaría que le dediques mucho tiempo, pero puede resultar útil conocer los conceptos básicos de la sintaxis, al menos lo suficiente como para que puedas consultar el manual rápidamente si alguna vez quieres usarlo.

La mayoría de las frases incómodas se pueden lograr con Perl one liners, si elige adoptar la mentalidad de Perl one liner.O simplemente use Perl tres líneas :)

Si mantiene scripts de shell escritos por alguien a quien le gustaba awk, entonces claramente necesitará aprender awk.

Incluso si no hay una necesidad práctica, si ya conoces las expresiones regulares, no te llevará mucho tiempo aprender lo básico y es divertido ver cómo se diseñaban las cosas en aquel entonces.Es bastante elegante.

Si ya conoces y usas sed, también podrías aprender al menos un poco de awk.Se pueden conectar juntos para realizar algunos trucos bastante poderosos.Siempre impresiona al público.

6 años después de hacerme esta pregunta ahora puedo responder con certeza:no, aprender awk no vale la pena.

Las tareas básicas se manejan fácilmente, pero los comandos bash básicos o incluso las herramientas GUI.Las tareas más complejas se abordarán fácilmente con lenguajes dinámicos modernos como Python (favorito o mío) o Ruby.

Definitivamente deberías aprender un lenguaje dinámico de scripting moderno, ya que te ayudará en muchas tareas (web, administración, procesamiento de datos, automatización, etc.).Y al hacerlo, aprender herramientas como awk es completamente inútil; en el mejor de los casos, le ahorrará unos segundos cada mes.

Computerworld hizo recientemente un entrevista con Alfred V.Aho (uno de los tres creadores de AWK) sobre AWK.Es una lectura bastante interesante.Así que tal vez encuentres algunas pistas en él sobre por qué es una buena idea aprender AWK.

Aprender AWK fue invaluable para mí en mi último contrato trabajando en un sistema Linux integrado en el que no estaban instalados Perl ni la mayoría de los demás lenguajes de scripting.

Es útil sobre todo si ocasionalmente tiene que analizar archivos de registro en busca de datos o resultados de programas mientras realiza scripts de shell, porque es muy fácil de lograr en awk que eso le requeriría un poco más de líneas de código en Python.

Ciertamente tiene más poder que eso, pero estas parecen ser tareas para las que la mayoría de la gente lo usa.

Por supuesto:Estoy trabajando en un entorno donde los únicos idiomas disponibles son:(un lenguaje de mierda que genera COBOL, OMG, OMG), bash (versión antigua), perl (aún no lo domino), sed, awk y algunas otras utilidades de línea de comandos.Conocimiento awk Me ahorró varias horas (y generó varias tareas de procesamiento de textos por parte de mis colegas; vienen a mí al menos tres veces al día).

awk tiene una muy buena relación utilidad/dificultad, y "simple awk" funciona en todos los Unix/Linux/MacOS (y también se puede instalar en otros sistemas).

Fue diseñado en la Edad de Oro, cuando la gente odiaba escribir, por lo que los guiones pueden ser muy, muy cortos y rápidos de escribir.Intentaré instalar mawk, una versión rápida, supuestamente acelera el cálculo unas 9 veces, awk/gawk es bastante lento, así que si quieres usarlo en lugar de R, etc.es posible que quieras mawk.

Yo diría que probablemente ya no valga la pena.Lo uso de vez en cuando como un editor de secuencias mucho más versátil que sed con capacidades de búsqueda incluidas, pero si dominas Python, no conozco ninguna tarea que puedas terminar mucho más rápido para compensar el tiempo necesario. aprender mal.

El siguiente comando es probablemente el único para el que he usado awk en los últimos dos años (purga paquetes medio eliminados de mis sistemas Debian/Ubuntu):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P

No.

Aunque pueda resultar interesante, puedes hacer todo lo que awk puede hacer utilizando otras herramientas más potentes como Perl.

Dedique su tiempo a aprender esas herramientas más poderosas y, sólo de paso, adquiera algunas cosas en el camino.

Yo diría que sí.Para cosas simples, AWK es mucho más fácil para el administrador de sistemas/desarrollador sin experiencia que Python.Puedes aprender un poco de AWK y hacer muchas cosas, aprender Python significa aprender un lenguaje completamente nuevo (sí, sé que AWK es un lenguaje, también tiene sentido).

Perl podría ser capaz de hacer muchas cosas que AWK puede hacer, pero si me ofrecieran la opción hoy en día, elegiría Python aquí.Entonces sí, deberías aprender AWK.pero aprende Python también :-)

Ahora que PERL está adaptado a prácticamente todas las plataformas importantes, diría que no vale la pena.Es más versátil que sed y awk juntos.En cuanto a la división automática, puedes hacerlo en Perl de esta manera:

perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

EDITAR:es posible que todavía quieras obtener un poco Estoy familiarizado con awk, porque algunas otras herramientas se basan en su filosofía de acciones basadas en patrones (p. ej.DTrace en Solaris).

Trabajo en el área donde los archivos están en formato de columna.Así que awk es invaluable para mí para REFORMATEAR el archivo para que diferentes programas puedan trabajar juntos.Para profesionales que no son de TI, usar awk es suficiente y perfecto.Hoy en día, la velocidad de la computadora no es un problema, por lo que puedo combinar awk y Unix para canalizar muchos comandos de 1 línea en un "script".Con la búsqueda de Awk por campo y registro, lo uso para verificar los datos del archivo muy rápidamente, en lugar de "vi" para abrir un archivo.Debo decir que la capacidad de awk me dio alegría en mi trabajo, especialmente porque puedo ayudar a mis compañeros de trabajo a resolver las cosas rápidamente usando awk.Código asombroso para mí.

Recientemente estuve intentando visualizar archivos pcap de red registrando un ataque de DOS que ascendió a más de 20 Gbs.Necesitaba la marca de tiempo y las direcciones IP.En mi escenario, AWK La frase de una sola línea funcionó fabulosamente y también bastante rápido.Yo usé específicamente AWK para limpiar los archivos extraídos, obtenga las direcciones IP y el recuento total de paquetes de esas direcciones IP dentro de un período de tiempo agrupado.Estoy totalmente de acuerdo con lo que otras personas han escrito arriba.Depende de tus necesidades.

awk es un lenguaje de herramientas poderosas, por lo que es probable que encuentres awk siendo utilizado en algún lugar si usted es un profesional de TI de cualquier tipo.Si puedes manejar la sintaxis y las expresiones regulares de grep y sed entonces no deberías tener problemas para contestar awk y probablemente valga la pena hacerlo.

donde he encontrado awk Lo que realmente brilla está en simplificar cosas como procesar registros de varias líneas y manipular/interpolar múltiples archivos simultáneamente.

Una razón para NO aprender awk es que no tiene coincidencias no codiciosas en expresiones regulares.

Tengo un código awk que ahora debo reescribir solo porque de repente depuré que no existen coincidencias no codiciosas en awk/gawk, por lo que no puede ejecutar correctamente algunas expresiones regulares.

Depende de tus compañeros de equipo, de tu líder y de la tarea en la que estés trabajando.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even java
    }
  }else{
    do as they ask
  }
}

He estado codificando algo en Python actualmente.Pero todavía no lo conozco lo suficiente como para usarlo fácilmente para transformaciones simples de archivos.

Con awk puedo desarrollar rápidamente un fragmento de código de una línea en la línea de comando de Unix que realiza algunas transformaciones bastante elegantes.Cada vez que uso awk, el fragmento de código que escribo será desechable y no tendrá más de unas pocas líneas.Tal vez una declaración "if" y una declaración "printf" aquí o allá en una línea.

Nunca he escrito un fragmento de código de más de 10 líneas con awk.Vi algunos de esos guiones hace años.

Pero cualquier cosa que requiriera muchas líneas de código, recurriría a Python.

Me encanta.Es una herramienta muy poderosa en combinación con sed.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top