Pregunta

  • ¿Cuál es la diferencia entre awk y sed?
  • ¿Qué tipo de aplicación es mejor usar casos para herramientas sed y awk?
¿Fue útil?

Solución

sed es un editor de flujo. Funciona con secuencias de caracteres por línea. Tiene un lenguaje de programación primitivo que incluye bucles estilo goto y condicionales simples (además de la coincidencia de patrones y la coincidencia de direcciones). Básicamente, solo hay dos '' variables '': espacio de patrón y espacio de retención. La legibilidad de los scripts 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 comandos y funciones de idioma.

awk está orientado hacia campos delimitados por línea. Tiene construcciones de programación mucho más robustas que incluyen if / else , while , do / while y for (estilo C e iteración de matriz). Hay soporte completo para variables y matrices asociativas unidimensionales más matrices multidimensionales kludgey (IMO). 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" del libro "C Lenguaje de programación" fama (sin olvidar A ho y W einberger). Se podría escribir un detector de plagio académico usando awk .

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

Ambos programas usan expresiones regulares para seleccionar y procesar texto.

Tendería a usar sed donde 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 los "corchetes de contador" " formulario (por ejemplo, " (231.45) ") usando esto (que tiene margen de mejora):

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

Usaría awk cuando el texto se parece más a filas y columnas o, como awk se refiere a ellos " registros " y "campos". Si iba a hacer una operación similar a la anterior, pero solo en el tercer campo en un archivo simple delimitado por comas, 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.

Otros consejos

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 simplemente manipular texto. Es un lenguaje de programación en sí mismo con la mayoría de las cosas que aprende en la programación, como matrices, bucles, control de flujo si / de lo contrario, etc. Puede "programar". en sed también, pero no querrás mantener el código escrito en él.

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

Conclusión: utilice sed para el análisis de texto muy simple. Cualquier cosa más allá de eso, awk es mejor. De hecho, puede deshacerse de sed por completo y simplemente usar awk. Dado que sus funciones se superponen y awk puede hacer más, solo use awk. También reducirá su curva de aprendizaje.

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

Para mí, la regla para separarlos es: usar sed para automatizar tareas que de otro modo harías en un editor de texto de forma manual. Es por eso que se llama stream editor . (Puede usar los mismos comandos para editar texto en vim). Utilice awk si desea analizar texto, es decir, contar campos, calcular totales, extraer y reorganizar estructuras, etc.

Además, no debe olvidarse de grep . Use grep si solo desea buscar / extraer algo en un texto (archivo)

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