- ¿Cuál es la diferencia entre awk y sed?
- ¿Qué tipo de aplicación son los mejores casos de uso para herramientas sed y awk?
Respuestas:
sed
es un editor de stream. 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 espera. La legibilidad de los scripts puede ser difícil. Las operaciones matemáticas son extraordinariamente incómodas en el mejor de los casos.
Existen varias versiones de sed
diferentes niveles de soporte para las opciones de línea de comandos y las características del lenguaje.
awk
está orientado hacia campos delimitados por línea. Tiene mucho más robusto construcciones de programación incluyendo if
/ else
, while
, do
/ while
y for
(estilo C y la matriz iteración). Hay soporte completo para variables y matrices asociativas unidimensionales más (IMO) kludgey matrices multidimensionales. Las operaciones matemáticas se parecen a las de C. Tiene printf
y funciona. La "K" en "AWK" significa " K ernighan" como en "Kernighan y Ritchie" de la fama del libro "C Programming Language" (sin olvidar a A ho y W einberger). Se podría escribir un detector de plagio académico utilizando awk
.
GNU awk
( gawk
) tiene numerosas extensiones, incluidas matrices multidimensionales verdaderas en la última versión. Hay otras variaciones de awk
incluir mawk
y nawk
.
Ambos programas usan expresiones regulares para seleccionar y procesar texto.
Solí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é en la forma "signo menos seguido de una secuencia de dígitos" (por ejemplo, "-231.45") con la forma de "paréntesis del contador" (por ejemplo, "(231.45)" ) utilizando esto (que tiene margen de mejora):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Lo usaría awk
cuando el texto se parezca más a filas y columnas o, como se awk
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.
sed
: sed.sourceforge.net/#scripts
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. También puede "programar" en sed, pero no querrá 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.
sed
, 's/search/replace'
es mucho más fácil de escribir que awk
la sintaxis y es lo que necesita la mayor parte del tiempo.
Ambas herramientas están destinadas a 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 manualmente. Es por eso que se llama editor de flujo . (Puede usar los mismos comandos para editar texto en vim). Úselo awk
si desea analizar texto, es decir, contar campos, calcular totales, extraer y reorganizar estructuras, etc.
Además, no debes olvidarte grep
. Úselo grep
si solo desea buscar / extraer algo en un texto (archivo)