![Cómo hacer que funcione este comando awk](https://rvso.com/image/76427/C%C3%B3mo%20hacer%20que%20funcione%20este%20comando%20awk.png)
Quiero que el siguiente comando funcione pero no puedo. Por favor comprueba esto:
echo "random string random string mark: abcde random string random string" |
awk '{gensub(/^.*mark: (.{5,5}).*$/,"\\1","g"); print}'
Quiero que este comando devuelva sólo "abcde". Pero siempre devuelve la cadena de entrada completa. ¿Por qué?
Respuesta1
El comando gensub no cambia la cadena. El resultado es una salida de la función.
Por favor, inténtalo:
echo "random string random string mark: abcde random string random string" |
awk '{print(gensub(/^.*mark: (.{5,5}).*$/,"\\1","g"))}'
Editar:
Resulta que el usuario necesita analizar el resultado superior, lo cual hace (como pregunta el usuario):
top -b -n 1 -d 1 |
awk 'NR==1{print(gensub(/.*load average: ([0-9\.\, ]+).*$/,"\\1","gs"))}'
Nota: Permite tanto el punto como la coma para las configuraciones regionales que usan una coma como separador decimal.
Por favor, echa un vistazo a mpstat.como se presenta aquí, puede que se ajuste mejor a sus necesidades.
Respuesta2
Para reformular su pregunta: desea imprimir la primera palabra después de la cadena "marca:".
En camino, en awk:
echo "random string random string mark: abcde random string random string" | \
awk -v RS="mark: " 'NR==2{print $1}'
Lo anterior divide la cadena en dos registros separados por "marca:", y luego imprime la primera palabra del segundo registro (que es "abcde").
En sede:
echo "random string random string mark: abcde random string random string" | \
sed 's/.*mark: \([^ ]*\).*/\1/'
Lo anterior utiliza expresiones regulares para encontrar la primera palabra que no sea un espacio después de la "marca:" y reemplaza toda la cadena con esa palabra.