2010-09-24 33 views
6

Tengo un pequeño script bash que greps/awk párrafo mediante el uso de una palabra clave.¿Cómo pasar la salida AWK a variable?

Pero después de agregar los códigos adicionales: set var = "(......)" solo imprime una línea en blanco y no el párrafo.

Entonces, me gustaría preguntar si alguien sabe cómo pasar apropiadamente la salida awk en una variable para la salida?

Mis códigos:

#!/bin/sh 

set var = "(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop 
/logs/Default.log)" 
echo $var; 

Gracias!

+2

Hágalo un hábito para poner siempre comillas dobles alrededor de variables: 'echo" $ var "'. Esto generalmente muerde a los usuarios con nombres de archivos que contienen espacios. –

Respuesta

5

Utilice command substitution para capturar la salida de un proceso.

#!/bin/sh 

VAR="$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)" 
echo "$VAR" 

algunos consejos generales con respecto a secuencias de shell:

  • (casi) siempre citar toda referencia variable.
  • Nunca coloque espacios alrededor del signo igual en la asignación de variables.
+0

No se puede trabajar "línea 5: awk BEGIN {RS = ORS = \ n \ n: comando no encontrado" ... – JavaNoob

+2

use $() siempre que sea posible. – ghostdog74

+1

@JavaNoob, debes tener cuidado con las barras diagonales inversas dentro de los palos. mira aquí http://mywiki.wooledge.org/BashFAQ/082 – lesmana

3
  • Debe utilizar "sustitución de comando". Coloque el comando dentro de las barras negras, `COMMAND` o, en un par de paréntesis precedidos por un signo de dólar, $(COMMAND).
  • Para establecer una variable, no usa set y no puede tener espacios antes y después de =.

Prueba esto:

var=$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log) 
echo $var 
2

Usted me dio la idea de esta por matar a un proceso :). Solo cromo al proceso que quieras matar.

Prueba esto:

VAR=$(ps -ef | grep -i chromium | awk '{print $2}'); kill -9 $VAR 2>/dev/null; unset VAR; 
+0

Generalmente, quieres usar el argumento 'ps -C', como en' ps -C chromium'.El uso de grep con salida de ps como este eventualmente regresará para morderte cuando haya un nombre de archivo abierto en vim o algo que coincida con el comando que estabas buscando. Y puede especificar que solo el pid esté en la salida, guardando awk usando 'ps -C chromium -o pid ='. – dannysauer

+0

O simplemente use 'killall chromium', supongo;) – dannysauer

0

intenta crear una variable procedente de bóveda/Hashicorp, al utilizar variables de la plantilla del envasador, así:

BUILD_PASSWORD=$(vault read secret/buildAccount| grep ^password | awk '{print $2}') 
echo $BUILD_PASSWORD 

Usted puede a la misma con grep ^user

1

cada vez que vea grep canalizado a awk, puede soltar el grep. por lo anterior,

awk '/^password/ {print $2}' 

awk puede sustituir fácilmente a cualquier comando de texto como el corte, cola, wc, etc., y tr especally múltiples greps hilo al lado del otro. es decir

grep some_co.mand | a | grep b ... to | awk '/a|b|and so on/ {some action}. 
Cuestiones relacionadas