17 votos

Puede awk utilizarse en su lugar?

Me gustaría obtener el número de rating como resultado de este

# nc localhost 9571 
language:
language:en_ZA.UTF-8
language:en_ZW.UTF-8
session-with-name:Ubuntu Classic (No effects):gnome-session --session=2d-gnome
session-with-name:Ubuntu (Safe Mode):gnome-session -f --session=2d-gnome
session-with-name:Ubuntu Classic:gnome-session --session=classic-gnome
xsession:/etc/X11/Xsession
rating:94

Puedo hacerlo como este

# nc localhost 9571 | grep rating | cut -d: -f2
94

pero podría awk ser utilizado en lugar de una solución más sencilla?

32voto

quanta Puntos 31979
$ nc localhost 9571 | awk -F: '/rating/ { print $2 }'

9voto

marshally Puntos 2260

Usted también puede utilizar el shell:

nc localhost 9571 | 
while IFS=: read key val; do [[ $key = "rating" ]] && echo "$val"; done

7voto

Michał Šrajer Puntos 578

sí, usted puede (y debe) utilizar (uno) awk en lugar de (dos) grep y corte:

$ nc localhost 9571 | awk -F: '/^rating:/ { print $2 }'

Asegúrese de hacer coincidir de línea tan bueno como usted puede para evitar los mencionados errores.

  • /rating/ obras,
  • /^rating/ es mejor (y más seguro),
  • /^rating:/ es mejor (en este caso).

4voto

MadHatter Puntos 44059

Puede:

nc localhost 9571  | awk -F: '{ if ($1 == "rating") print $2 }' 

(No sé lo que estás haciendo con localhost anteriormente, por lo que utiliza su salida como de entrada a mi comando awk, luego reemplazado el "gato" con "nc" - pero que debería estar bien.)

Pero, ¿por qué haces esto? El UNIX manera es tener un montón de pequeñas herramientas, cada una de las cuales hace una cosa bien, agrupados a través de las tuberías, en lugar de utilizar grandes multifunción herramientas. Usted necesita para seleccionar una sola coincidencia de línea, seleccione un campo de ello: grep selecciona las líneas con los partidos, y cut selecciona los campos de las líneas de entrada; son perfectos para la tarea. Pero si usted realmente quiere hacerlo todo-en-uno con awk, bueno, hay que ir.

1voto

SmallClanger Puntos 6536

Quanta me pegaba a él, pero voy a incluir un sed variante, si eres de esa manera inclinado:

nc localhost 9571 | sed -ne 's/^rating://p'

Lo mismo ocurre con lo que MadHatter dijo, sin embargo. La solución actual es la perfección del sonido. (Aunque me gustaría grep para "^rating:" en lugar de la palabra para asegurar que usted recibe sólo la línea que desee.)

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: