Sabemos que podemos obtener la segunda columna de la línea que queremos de un archivo usando estas dos técnicas:
awk '/WORD/ { print $2 }' filename
o
grep WORD filename| cut -f 2 -d ' '
Mis preguntas son:
- ¿Cuáles son las diferencias entre los dos comandos anteriores?
- ¿Cuál tiene el mejor rendimiento?
- ¿Cuáles son las ventajas de usar
awksobre usarcuty viceversa? - ¿Qué opciones
awknos dacuty viceversa?
awk
grep
performance
cut
Networker
fuente
fuente

echo filenameocat filename?Respuestas:
La diferencia más destacada entre sus dos líneas dependería de la entrada.
cuttoma un solo carácter-dcomo delimitador de campo (el valor predeterminado es TAB), y cada aparición de ese carácter comienza un nuevo campo.awkSin embargo, es más flexible. El separador está en laFSvariable y puede ser una cadena vacía (cada carácter de entrada forma un campo separado), un solo carácter o una expresión regular. El caso especial de un solo carácter de espacio (el valor predeterminado) significa dividir en cualquier secuencia de espacios en blanco. Además,awksuprime los espacios en blanco iniciales de forma predeterminada.Por favor compare:
Aquí, se
awkdivide en la secuencia de espacios entreabcydefmientrascuttoma cada espacio como separador.Lo que tome dependerá de lo que quiera lograr. De lo contrario, esperaría
cutser más rápido ya que es una herramienta más pequeña y de un solo propósito, mientras queawktiene su propio lenguaje de programación.fuente
cutes probable que sea más rápido que Awk solo , pero no es tan seguro quegrep ... | cutsea más rápido que Awk puro.En términos generales, cuanto más especializada es una herramienta, más rápida es. Entonces, en la mayoría de los casos, puede esperar
cutygrepser más rápido quesed, ysedser más rápido queawk. Si está comparando tuberías más largas de herramientas más simples con una sola invocación de una herramienta más compleja, no hay una regla general. Esto solo importa con entradas grandes (digamos, millones de líneas); para entradas cortas, no verá ninguna diferencia.La ventaja de las herramientas más complejas es, por supuesto, que pueden hacer más cosas.
Sus comandos usan gato innecesariamente. Utilice la redirección en su lugar (especialmente si está preocupado por la velocidad, aunque probablemente no debería preocuparse por la velocidad hasta que haya ejecutado puntos de referencia¹).
Estos comandos son casi equivalentes. Las diferencias son:
grep -Etienen sintaxis regexp casi idénticas (expresiones regulares extendidas).cut -d ' 'trata cada carácter espacial individual como un delimitador. El delimitador predeterminado de Awk es cualquier secuencia de espacios en blanco, que puede ser múltiples espacios, una pestaña, etc. No puede utilizar secuencias arbitrarias de espacios en blanco como separadores concut. Para utilizar espacios individuales como separadores en awk, ajuste el separador de campo a una expresión regular que coincide con un solo espacio, que no sea una expresión regular que consiste en solo espacio (que es un caso especial que significa “cualquier secuencia de espacios en blanco”, es decir, el valor por defecto):awk -F '[ ]' '/WORD/ {print $2}'.¹ La primera regla de optimización del programa: no lo hagas. La segunda regla de optimización de programas (¡solo para expertos!): No lo hagas todavía. - Michael A. Jackson
fuente
Su comando,
Ni siquiera necesitas un
catcomando. Puedes intentarloY el siguiente comando redirige la salida de cat a grep y luego a cortar,
Lo más probable es que debamos evitar la redirección de salida. Awk hace el trabajo en una línea, pero
cutnecesita ungrepcomando para obtener solo las líneas que contienen una palabra en particular e imprime la columna 2 de acuerdo con el espacio delimitador.Puede hacer las cosas en awk si el corte no lo hace.
fuente
grep WORD filename.