linux - diferencias entre grep, awk y sed
bash (3)
Posible duplicado:
¿Cuáles son las diferencias entre Perl, Python, AWK y sed?
¿Cuál es la diferencia entre sed y awk?
Tal vez no sea una pregunta muy específica, pero estoy confundido acerca de las diferencias entre grep
, awk
y sed
en términos de su rol en la administración del sistema Unix / Linux y el procesamiento de texto.
Breve definición:
grep
: busca términos específicos en un archivo
#usage
$ grep This file.txt
Every line containing "This"
Every line containing "This"
Every line containing "This"
Every line containing "This"
$ cat file.txt
Every line containing "This"
Every line containing "This"
Every line containing "That"
Every line containing "This"
Every line containing "This"
Ahora awk
y sed
son completamente diferentes que grep
. awk
y sed
son procesadores de texto. No solo tienen la capacidad de encontrar lo que buscas en el texto, también tienen la capacidad de eliminar, agregar y modificar el texto (y mucho más).
awk
se usa principalmente para la extracción de datos y la generación de informes. sed
es un editor de flujo
Cada uno de ellos tiene su propia funcionalidad y especialidades.
Ejemplo
Sed
$ sed -i ''s/cat/dog/'' file.txt
# this will replace any occurrence of the characters ''cat'' by ''dog''
Awk
$ awk ''{print $2}'' file.txt
# this will print the second column of file.txt
Uso básico de awk
:
Calcular suma / promedio / máximo / mínimo / etc. lo que sea que puedas necesitar
$ cat file.txt
A 10
B 20
C 60
$ awk ''BEGIN {sum=0; count=0; OFS="/t"} {sum+=$2; count++} END {print "Average:", sum/count}'' file.txt
Average: 30
Te recomiendo que leas este libro: Sed & Awk: 2nd Ed.
Te ayudará a convertirte en un usuario competente de sed / awk en cualquier entorno tipo Unix.
Grep es útil si desea buscar rápidamente líneas que coincidan en un archivo. También puede devolver otra información simple como números de línea coincidentes, recuento de coincidencias y listas de nombres de archivos.
Awk es un lenguaje de programación completo basado en la lectura de archivos de estilo CSV, el procesamiento de registros y, opcionalmente, la impresión de un conjunto de datos de resultados. Puede hacer muchas cosas, pero no es la herramienta más fácil de usar para tareas simples.
Sed es útil cuando desea realizar cambios en un archivo basado en expresiones regulares. Le permite emparejar fácilmente partes de líneas, hacer modificaciones e imprimir resultados. Es menos expresivo que awk, pero eso lo hace más fácil de usar para tareas simples. Tiene muchos operadores más complicados que puedes usar (creo que incluso está completo), pero en general no usarás esas características.
Solo quiero mencionar algo, hay muchas herramientas que pueden hacer procesamiento de texto, por ejemplo ordenar, cortar, dividir, unir, pegar, comunicar, uniq, columna, rev, tac, tr, nl, pr, cabeza, cola ... ..
son muy útiles pero tienes que aprender sus opciones, etc.
Una manera perezosa (no la mejor) para aprender el procesamiento de texto podría ser: solo aprenda grep, sed y awk. con estas tres herramientas, puede resolver casi el 99% de los problemas de procesamiento de texto y no necesita memorizar más de diferentes cmds y opciones. :)
Y, si aprendió y usó los tres, sabía la diferencia. En realidad, la diferencia aquí significa qué herramienta es buena para resolver qué tipo de problema.
una forma más perezosa podría ser aprender un lenguaje de script (python, perl o ruby) y hacer cada procesamiento de texto con él.