print - ¿Todavía hay alguna razón para aprender AWK?
awk print column (23)
6 años después de hacer esta pregunta ahora puedo responder con certeza: no, aprender awk no vale la pena.
Se manejan tareas básicas 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 (fav o mine) o Ruby.
Definitivamente debe aprender un lenguaje dinámico de scripts mordern, ya que le ayudará en tantas tareas (web, administración, crujido 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 segundos cada mes.
Estoy constantemente aprendiendo nuevas herramientas, incluso antiguas, porque me gusta usar la solución correcta 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í, pero para el procesamiento de texto simple, puedo usar grep
, cut
, sed
, etc., mientras que para los complejos, voy a ir a Python.
Ahora no me refiero a que sea una herramienta poderosa y útil. Pero dado que toma tiempo y energía aprender una nueva herramienta, ¿vale la pena ?
Ahora que PERL se transporta 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, puedes hacerlo en perl de esta manera:
perl -F'':'' -ane ''print $F[3],"/n";'' /etc/passwd
EDITAR: es posible que desee familiarizarse con awk, porque algunas otras herramientas se basan en su filosofía de acciones basadas en patrones (por ejemplo, DTrace en Solaris).
Aprender AWK fue invaluable para mí en mi último contrato trabajando en un sistema Linux incorporado en el que no se instalaron ni Perl ni la mayoría de los demás lenguajes de scripting.
Computerworld recientemente hizo una interview con Alfred V. Aho (uno de los tres creadores de AWK) sobre AWK. Es una lectura bastante interesante. Así que tal vez encuentres algunos consejos, por qué es una buena idea aprender AWK.
Creo que awk es genial si tu 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 columna (s) en particular.
p.ej
awk -F /t ''{ if ($2 > $3) print; }'' <filename>
se imprimirá solo si el valor de la 2ª columna en un archivo separado por tabulación es mayor que el valor de la 3ra 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.
También aprender awk es bastante bajo costo. Puedes aprender los conceptos básicos de awk en menos de una hora, por lo que no es tanto esfuerzo como aprender cualquier otro lenguaje de programación / scripting.
Creo que depende del entorno en el que te encuentres. Si eres una persona * nix, entonces saber awk
es una buena cosa. El único otro entorno de scripting que se puede encontrar en prácticamente cada * nix es sh
. Así que mientras que grep
, sed,
etc. seguramente pueden reemplazar awk
en una moderna distribución de linux
, cuando te mueves a sistemas más exóticos, sabiendo un poco de awk
será Real Handy.
awk
también se puede usar para algo más que el procesamiento de texto. Por ejemplo, uno de mis supervisores escribe el código de astronomía en awk
: así de anticuado e impresionante es. En sus días, era la mejor herramienta para el trabajo ... y ahora, a pesar de que sus alumnos como yo usan Python y lo que no, se apega a lo que sabe y funciona bien.
Para cerrar, hay un montón de viejos códigos dando vueltas alrededor del mundo, sabiendo que un poco de awk
no va a doler. También te hará mejor * nix persona :-)
Depende de tus compañeros de equipo, tu líder y 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
}
}
Es útil sobre todo si tiene que analizar ocasionalmente archivos de registro para datos o resultados de programas mientras se crean scripts, porque es muy fácil de lograr en awk que eso le tomaría un poco más de líneas de código en Python.
Ciertamente tiene más poder que eso, pero parece que son tareas para las que la mayoría de la gente lo usa.
Hace poco intenté visualizar archivos pcap de red que registraban un ataque de DOS que ascendía a más de 20 Gb. Necesitaba la marca de tiempo y las direcciones IP. En mi caso, AWK one-liner funcionó fabulosamente y bastante rápido también. Específicamente utilicé AWK para limpiar los archivos extraídos, obtener las direcciones IP y el recuento total de paquetes de esas direcciones IP dentro del lapso de tiempo agrupado. Estoy totalmente de acuerdo con lo que otras personas han escrito anteriormente. Depende de tus necesidades.
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
La mayoría de los revestimientos de awk one se pueden lograr con revestimientos Perl one, si eliges entrar en un modo de pensar Perl one liner. O solo usa Perl tres liners :)
Si mantienes guiones de shell escritos por alguien a quien le gusta awk, entonces claramente, vas a necesitar aprender awk.
Incluso si no hay una necesidad práctica, si ya conoce la expresión regular, no tardará mucho en aprender lo básico, y es divertido ver cómo se diseñaron las cosas en aquel entonces. Es bastante elegante.
Nop.
Aunque podría ser interesante, puedes hacer todo lo que puedes hacer con otras herramientas más potentes como Perl.
Dedique su tiempo a aprender esas herramientas más poderosas, y solo incidentalmente recoja algo de torpeza en el camino.
Por supuesto: estoy trabajando en un entorno en el que los únicos idiomas disponibles son: (un lenguaje de shity 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. Saber que awk
me ahorró varias horas (y que había generado varias tareas de procesamiento de textos de mis colegas, que vienen a mí al menos tres veces al día).
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 excelente libro The AWK Programming Language por sus autores Aho, Kernighan y Weinberger. Podrías pensar, por el nombre, que simplemente te enseña awk. En realidad, eso es solo el comienzo. Lanzando en la amplia gama de problemas que pueden abordarse una vez que uno está utilizando un lenguaje de scripting 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 me sirve de memoria) un compilador para un pequeño lenguaje de programación específico de proyecto. ¡Si solo hubieran programado un sistema operativo de ejemplo usando awk, el libro habría sido una introducción bastante completa a la informática!
Famoso, claro y conciso, como el libro original de C, también es un maravilloso ejemplo de escritura técnica amigable hecha bien. Incluso el índice es una pieza de artesanía.
Awk? 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 características más amplias de su sistema e Internet a las que Python brinda acceso. Pero el libro? ¡Siempre te alegrará de haberlo leído!
Si ya conoces y usas sed, también podrías recoger al menos un poco de awk. Se pueden canalizar juntos para algunos trucos bastante poderosos. Siempre impresiona a la audiencia.
Trabajo en el á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 funcionar juntos. Para la profesión no TI, usar awk es suficiente y perfecto. Ahora, un día, la velocidad de la computadora no es un problema, así que puedo combinar awk & unix para canalizar muchos comandos de 1 línea en un "script". Con la búsqueda de Awk por campo y registro, la utilizo 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, soy capaz de ayudar al compañero de trabajo a resolver las cosas rápidamente usando awk. Código increíble para mí.
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 las coincidencias no codiciosas en awk / gawk, por lo que no puede ejecutar correctamente algunas expresiones regulares.
Uso AWK de vez en cuando para tratar 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á raspando la pantalla. De hecho, podría ser que adoro AWK porque me permite construir la solución incorrecta a los problemas tan rápidamente :) más ejemplos . También se menciona en las adorables Programming Pearls de Jon Bentley.
Utilizo awk de vez en cuando. Es bueno para mezclar texto muy simple en el medio de una tubería; llena un nicho muy estrecho entre no necesitarlo y tener que sacar Perl / Python / lo que sea.
No le aconsejaría que dedique mucho tiempo a ello, pero podría ser útil conocer los principios básicos de la sintaxis, al menos lo suficiente como para consultar el manual rápidamente si alguna vez desea utilizarlo.
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 con las capacidades de búsqueda incluidas, pero si eres hábil 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 paquetes medio eliminados de mis sistemas Debian / Ubuntu):
$ dpkg -l|awk ''/^rc/ {print $2}''|xargs sudo dpkg -P
Yo diría que sí. Para cosas simples, AWK es mucho más fácil para el administrador de sistemas / inexperto 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 también es un sentido).
Perl podría hacer muchas cosas que AWK puede hacer, pero ofreció la opción en este día y edad. Escogería Python aquí. Entonces sí, deberías aprender AWK. pero aprende Python también :-)
awk tiene una muy buena relación utilidad / dificultad, y "awk simple" funciona en todos los Unix / Linux / MacOS (y también se puede instalar en otros sistemas).
Fue diseñado en Golden Age cuando la gente odiaba el tipeo, por lo que los scripts pueden ser muy, muy cortos y rápidos de escribir. Trataré de 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., quizás quieras mawk.
awk
es un lenguaje powertool, por lo que es probable que encuentre awk
algún lugar si es un profesional de TI de cualquier tipo. Si puede manejar la sintaxis y las expresiones regulares de grep
y sed
entonces no debería tener problemas para recuperar awk
y probablemente valga la pena.
Donde he encontrado que awk
realmente brilla es en simplificar cosas como procesar registros de múltiples líneas y manipular / interpolar múltiples archivos simultáneamente.