¿Cuál es la diferencia entre sed y awk?

  • ¿Cuál es la diferencia entre awk y sed?
  • ¿Qué tipo de aplicación son los mejores casos de uso para las herramientas sed y awk?

sed es un editor de flujo. Funciona con flujos de caracteres por línea. Tiene un lenguaje de progtwigción primitivo que incluye bucles goto-style y condicionales simples (además de la coincidencia de patrones y la coincidencia de direcciones). Básicamente, hay solo dos “variables”: espacio de patrón y espacio de espera. La legibilidad de los guiones puede ser difícil. Las operaciones matemáticas son extraordinariamente incómodas en el mejor de los casos.

Hay varias versiones de sed con diferentes niveles de soporte para opciones de línea de comando y características de lenguaje.

awk está orientado hacia campos delimitados por línea. Tiene construcciones de progtwigción mucho más robustas incluyendo if / else , while , do / while y for (estilo C e iteración de matriz). Existe un soporte completo para las variables y matrices asociativas de una dimensión más (IMO) kludgey matrices multidimensionales. Las operaciones matemáticas se parecen a las de C. Tiene printf y funciones. La “K” en “AWK” significa ” K ernighan” como en “Kernighan y Ritchie” de la fama del libro “C Programming Language” (sin olvidar A ho y W einberger). Uno podría concebiblemente escribir un detector de plagio académico usando awk .

GNU awk ( gawk ) tiene numerosas extensiones, incluidas verdaderas matrices multidimensionales en la última versión. Hay otras variaciones de awk incluyendo mawk y nawk .

Ambos progtwigs usan expresiones regulares para seleccionar y procesar texto.

Tiendo a usar sed cuando hay patrones en el texto. Por ejemplo, podría reemplazar todos los números negativos en algún texto que estén en la forma “signo menos seguido de una secuencia de dígitos” (por ejemplo, “-231.45”) con el formato “paréntesis del contador” (por ejemplo, “(231.45)” ) usando esto (que tiene margen de mejora):

 sed 's/-\([0-9.]\+\)/(\1)/g' inputfile 

Yo usaría awk cuando el texto se parezca más a filas y columnas o, como awk refiere a ellos “registros” y “campos”. Si fuera a hacer una operación similar a la anterior, pero solo en el tercer campo en un archivo delimitado por comas simple, podría hacer algo como:

 awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile 

Por supuesto, esos son solo ejemplos muy simples que no ilustran la gama completa de capacidades que cada uno tiene para ofrecer.

1) ¿Cuál es la diferencia entre awk y sed?

Ambas son herramientas que transforman el texto. PERO awk puede hacer más cosas además de solo manipular texto. Es un lenguaje de progtwigción en sí mismo con la mayoría de las cosas que aprendes en progtwigción, como matrices, bucles, control de flujo if / else, etc. También puedes “progtwigr” en sed, pero no querrás mantener el código escrito en él .

2) ¿Qué tipo de aplicación son los mejores casos de uso para las herramientas sed y awk?

Conclusión: Use sed para el análisis de texto muy simple. Cualquier cosa más allá de eso, awk es mejor. De hecho, puedes abandonar el sed por completo y solo usar awk. Como sus funciones se superponen y awk puede hacer más, solo usa awk. También reducirás tu curva de aprendizaje.

Ambas herramientas están diseñadas para trabajar con texto y hay tareas para las cuales se pueden usar ambas herramientas.

Para mí, la regla para separarlos es: Use sed para automatizar tareas que de otra forma haría en un editor de texto de forma manual. Es por eso que se llama editor de flujo. (Puede usar los mismos comandos para editar texto en vim). Use awk si quiere analizar texto, lo que significa contar campos, calcular totales, extraer y reorganizar estructuras, etc.

Además, no debes olvidarte de grep . Utilice grep si solo desea buscar / extraer algo en un texto (archivo)