Aprendo constantemente nuevas herramientas, incluso antiguas, porque me gusta utilizar la solución adecuada para el problema.
Sin embargo, me pregunto si todavía hay alguna razón para aprender algunos de ellos. awk
por ejemplo, es interesante para mí, sino para el procesamiento de texto simple, puedo usar grep
, cut
, sed
, etc, mientras que para los más complejos, voy a ir para Python.
Ahora bien, no quiero decir que no sea una herramienta poderosa y útil. Pero dado que se necesita tiempo y energía para aprender una nueva herramienta, ¿vale la pena ?
awk
text-processing
e-satis
fuente
fuente
Respuestas:
Creo que depende del entorno en el que te encuentres. Si eres una persona * nix, saber
awk
es algo bueno. El único otro entorno de secuencias de comandos que se puede encontrar en prácticamente todos los * nix essh
. Entoncesgrep
, aunque ,sed,
etc. , seguramente puede reemplazarawk
en unalinux
distribución convencional moderna , cuando se cambia a sistemas más exóticos, saber un pocoawk
será realmente ú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 enawk
, así de asombroso y de la vieja escuela es. En sus días, era la mejor herramienta para el trabajo ... y ahora, aunque sus estudiantes como yo usan Python y otras cosas, él se apega a lo que sabe y funciona bien.Para terminar, hay mucho código antiguo en todo el mundo, saber que un poco
awk
no va a doler. También te hará mejor * nix person :-)fuente
Si aprende rápidamente los conceptos básicos de awk, puede hacer cosas increíbles en la línea de comandos.
Pero la verdadera razón para aprender awk es tener una excusa para leer el magnífico libro The AWK Programming Language de sus autores Aho, Kernighan y Weinberger. Pensarías, por el nombre, que simplemente te enseña awk. De hecho, eso es solo el comienzo. Al lanzarse a la amplia gama de problemas que se pueden abordar una vez que se utiliza un lenguaje de secuencias de comandos conciso que facilita la manipulación de cadenas, y awk fue uno de los primeros, se 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 lenguaje de computadora específico para un proyecto pequeño! Si tan solo 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 obra de arte.
Awk? Si lo sabe, lo usará en la línea de comandos ocasionalmente, pero para algo más grande se sentirá atrapado, incapaz de acceder a las funciones más amplias de su sistema e Internet a las que algo como Python proporciona acceso. ¿Pero el libro? ¡Siempre te alegrarás de leerlo!
fuente
La única razón por la que uso
awk
es la división automática:Esto imprime el tercer campo delimitado por espacios en blanco en
file.in
. Es un poco más fácil que:fuente
awk '{print $3}' < file.in
lugar deawk '{print $3}' file.in
? ¿No lee awk archivos cuando se pasa como argumentos?awk
: /Creo que awk es genial si su archivo contiene columnas / campos . Lo uso al procesar / analizar una columna en particular en un archivo de varias columnas. O si quiero agregar / eliminar una (s) columna (s) en particular.
p.ej
se imprimirá solo si el valor de la segunda columna en un archivo separado por pestañas 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 es bastante económico. Puede aprender los conceptos básicos de awk en menos de una hora, por lo que no requiere tanto esfuerzo como aprender cualquier otro lenguaje de programación / scripting.
fuente
Utilizo AWK ocasionalmente para tratar con HTML. Por ejemplo, este código traduce tablas a archivos csv:
Lo cual es genial si estás raspando la pantalla. De hecho, podría ser el caso de que me encantara AWK porque me permite crear la solución incorrecta a los problemas con tanta rapidez :) más ejemplos . También se menciona en las encantadoras perlas de programación de Jon Bentley .
fuente
Yo uso awk de vez en cuando. Es bueno para mezclar texto muy simple en medio de una canalización; llena un nicho muy estrecho entre no necesitarlo en absoluto y tener que utilizar Perl / Python / lo que sea.
No le aconsejaría que dedique mucho tiempo a él, pero podría ser útil conocer los conceptos básicos de la sintaxis, al menos lo suficiente como para que pueda consultar el manual rápidamente si alguna vez desea usarlo.
fuente
La mayoría de los forros de awk one se pueden lograr con los forros de Perl one, si elige adoptar la mentalidad de un forro de Perl. O simplemente use Perl tres líneas :)
Si mantiene scripts de shell escritos por alguien a quien le gustó awk, entonces claramente, necesitará aprender awk.
Incluso si no hay una necesidad práctica, si ya conoce las expresiones regulares, no le tomará mucho tiempo aprender lo básico, y es divertido ver cómo se diseñaron las cosas en ese entonces. Es bastante elegante.
fuente
6 años después de hacer esta pregunta, ahora puedo responder con certeza: no, aprender awk no vale la pena.
Las tareas básicas son manejables pero comandos bash básicos, o incluso herramientas GUI fácilmente. 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, le ahorrará, en el mejor de los casos, unos pocos segundos cada mes.
fuente
Si ya conoce y usa sed, también podría aprender al menos un poco de awk. Se pueden unir para algunos trucos bastante poderosos. Siempre impresiona a la audiencia.
fuente
Computerworld hizo recientemente una entrevista con Alfred V. Aho (uno de los tres creadores de AWK) sobre AWK. Es una lectura bastante interesante. Entonces, tal vez encuentres algunas sugerencias en él, por qué es una buena idea aprender AWK.
fuente
Aprender AWK fue invaluable para mí en mi último contrato trabajando en un sistema Linux embebido en el que ni Perl ni la mayoría de los otros lenguajes de scripting estaban instalados.
fuente
awk tiene una muy buena relación utilidad / dificultad, y "simple awk" funciona en todos los sistemas 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, por lo que si desea usarlo en lugar de R, etc., es posible que desee mawk.
fuente
Es útil sobre todo si tiene que analizar ocasionalmente archivos de registro en busca de datos o salida de programas mientras se realiza un script de shell, porque es muy fácil de lograr en awk que eso le llevarí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.
fuente
Por supuesto: estoy trabajando en un entorno donde los únicos idiomas disponibles son: (algún lenguaje shity que genera COBOL, OMG, OMG), bash (versión anterior), perl (aún no lo domino), sed, awk y algunas otras utilidades de línea de comandos. Saber
awk
me ahorró varias horas (y había generado varias tareas de procesamiento de texto de mis colegas, vienen a mí al menos tres veces al día).fuente
Yo diría que probablemente ya no valga la pena. Lo uso de vez en cuando como un editor de flujo mucho más versátil que sed con habilidades de búsqueda incluidas, pero si eres competente con Python, no conozco una tarea que puedas terminar mucho más rápido para compensar el tiempo necesario. para aprender awk.
El siguiente comando es probablemente el único para el que he usado awk en los últimos dos años (purga los paquetes medio eliminados de mis sistemas Debian / Ubuntu):
fuente
No
Aunque puede ser interesante, puede hacer todo lo que awk puede hacer usando otras herramientas más poderosas como Perl.
Dedique su tiempo a aprender esas herramientas más poderosas, y solo incidentalmente aprenda algo en el camino.
fuente
Yo diría que la hay. 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 idioma completamente nuevo (sí, sé que AWK es un lenguaje que también tiene sentido).
Perl podría hacer muchas cosas que AWK puede hacer, pero si me ofreciera la opción en estos tiempos, elegiría Python aquí. Entonces sí, deberías aprender AWK. pero aprende Python también :-)
fuente
awk
es un lenguaje de herramientas eléctricas, por lo que es probable que loawk
utilicen en algún lugar si es un profesional de TI de cualquier tipo. Si puede manejar la sintaxis y las expresiones regulares degrep
ysed
entonces no debería tener problemas para aprenderawk
y probablemente valga la pena hacerlo.Donde he encontrado
awk
realmente brillar es en la simplificación de cosas como el procesamiento de registros de varias líneas y la manipulación / interpolación de varios archivos simultáneamente.fuente
Ahora que PERL se ha adaptado a casi 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, puede hacerlo en perl de esta manera:
EDITAR: es posible que aún desee familiarizarse un poco con awk, porque algunas otras herramientas se basan en su filosofía de acciones basadas en patrones (por ejemplo, DTrace en Solaris).
fuente
Trabajo en un área donde los archivos están en formato de columna. Así que awk es invaluable para mí para REFORMAR el archivo para que diferentes programas puedan trabajar juntos. Para los 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, así que puedo combinar awk y unix para canalizar muchos comandos de 1 línea en un "script". Con la búsqueda Awk por campo y registro, lo uso para verificar los datos del archivo muy rápido, en lugar de "vi" para abrir un archivo. Tengo que decir que la capacidad de awk trajo alegría a mi trabajo especialmente, puedo ayudar a un compañero de trabajo a resolver las cosas rápidamente usando awk. Código asombroso para mí.
fuente
Recientemente, estaba tratando de visualizar archivos pcap de red que registraban un ataque DOS que ascendía a más de 20 Gbs. Necesitaba la marca de tiempo y las direcciones IP. En mi escenario, AWK one-liner funcionó fabulosamente y bastante rápido también. Usé AWK específicamente para limpiar los archivos extraídos, obtener las direcciones IP y el recuento total de paquetes de esas direcciones IP dentro de un lapso de tiempo agrupado. Estoy totalmente de acuerdo con lo que otras personas han escrito anteriormente. Depende de tus necesidades.
fuente
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.
fuente
Depende de sus compañeros de equipo y de su líder y de la tarea en la que esté trabajando.
fuente
He estado haciendo algo de codificación en Python en este momento. Pero todavía no lo conozco lo suficientemente bien como para usarlo fácilmente para transformaciones simples de archivos únicos.
Con awk puedo desarrollar rápidamente un fragmento de código de una línea en la línea de comandos de Unix que hace algunas transformaciones bastante rápidas. 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 "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 estos guiones hace años.
Pero cualquier cosa que requiriera muchas líneas de código, recurriría a Python.
Amo awk. Es una herramienta muy poderosa en combinación con sed.
fuente