2009-08-30 24 views
5

Utilicé sed para un lote de ptovess donde no pude hacerlo con awk. ¿Debería haberlo hecho? O es más una cuestión de elección y llamada awk y sed equivalente para el uso. Ambos hacen la búsqueda común reemplazar similar con E/S. ¿Hay un buen ejemplo de lo que no se puede hacer con uno que el otro puede?¿Qué puede hacer eso que sed no puede hacer?

Respuesta

8

Una diferencia principal es que un programa awk puede mantener el estado y puede operar utilizando múltiples pases sobre los mismos datos. Una invocación de sed es necesariamente de paso único sin estado porque sed (Stream EDitor) está inherentemente orientado a flujos. La ventaja, sin embargo, es que esto hace que sed sea más simple y más apropiado para usar en cadenas de tuberías.

+2

No veo que sed sea "más apropiado para usar en cadenas de tuberías", simplemente porque awk PUEDE realizar múltiples pasadas, nada te obliga a hacerlo realmente. Para muchas tareas relacionadas con las tuberías (seleccionar campos específicos, por ejemplo) awk es mucho más fácil de usar que sed. –

+0

@anon Me parece extraño cómo está convirtiendo este hilo en algo "awk vs sed". No es útil en absoluto. – ata

+0

Cambié esto a la respuesta aceptada. ¡Gracias! –

2

SED es un editor de flujo, y por lo tanto no tiene variables y algunos otros constructos como AWK. AWK es un lenguaje completamente desarrollado.

+0

¿AWK, a diferencia de sed, es bueno para buscar y reemplazar dado cualquier código Unicode o Ascii? por lo tanto, tratar a todos los personajes de control, incluida la nueva línea, EOF, e.t.c. como binario? – barlop

2

G'day,

Awk es más potente. sed tiende a ser más limitado en lo que puede hacer.

Sed es bueno para los cambios de datos basados ​​en línea. Tiene algunas construcciones simples de bucle, las cosas típicas de expresiones regulares ed/ex/vi y cosas de sustitución, declaraciones compuestas, decisiones, etc. La mayoría de la gente lo usa para modificar los datos canalizados.

Awk es bueno para filtrar o reorganizar datos. Se usa principalmente para informar.

Sugiero echar un vistazo al excelente libro de Dale Dougherty "sed & awk" (sanitised Amazon link). Por cierto, tiene una de las mejores explicaciones de las expresiones regulares allí.

¡Muchas personas dirían usar Perl de todos modos! (-:

Editar: olvidaba decir que el lenguaje awk es bastante C como el que no es sorprendente dado que la 'k' en AWK significa Brian Kernighan Sí Eso Brian Kernighan

..!

Además, sed sólo funciona en flujos de datos mientras que awk trabaja en ambas corrientes y archivos de datos.

HTH

vivas, sed sólo funciona en flujos de datos mientras que awk trabaja en ambas corrientes y archivos de datos.

+1

GNU sed en realidad admite la edición de archivos en el lugar. –

+0

Sí.Pero, como dices, la opción -s es específica de GNU. Las implementaciones de Vanilla sed se basan en flujos. Eso es. –

6

En el original (y sigue siendo el mejor) libro, The AWK Programming Language, los siguientes se implementa (entre muchas otras cosas):

  • un ensamblador sencilla
  • descendente recursivo compilador
  • una indexación de texto programa

Intenta hacer eso con sed.

+1

Creo que esta es la respuesta a una pregunta completamente diferente. La pregunta es "¿Qué es lo que no puede hacer ese sed?", No "¿qué puede hacer ese sed?". Simplemente decir que "awk es mejor, más fuerte, más rápido" no responde la pregunta en absoluto. –

3

Lo único que se me ocurre es que sed puede hacer pequeños cambios en menos char cuenta el awk. Entonces, para ajustes rápidos en un shell en vivo, es más rápido escribir.

Cuestiones relacionadas