![Como fazer este comando awk funcionar](https://rvso.com/image/76427/Como%20fazer%20este%20comando%20awk%20funcionar.png)
Quero fazer o comando abaixo funcionar, mas não consigo. Por favor, verifique isso:
echo "random string random string mark: abcde random string random string" |
awk '{gensub(/^.*mark: (.{5,5}).*$/,"\\1","g"); print}'
Quero que este comando retorne apenas "abcde". Mas está sempre retornando toda a string de entrada. Por que?
Responder1
O comando gensub não altera a string. O resultado é uma saída da função.
Tente por favor:
echo "random string random string mark: abcde random string random string" |
awk '{print(gensub(/^.*mark: (.{5,5}).*$/,"\\1","g"))}'
Editar:
Acontece que o usuário precisa analisar a saída superior, o que acontece (conforme o usuário pede):
top -b -n 1 -d 1 |
awk 'NR==1{print(gensub(/.*load average: ([0-9\.\, ]+).*$/,"\\1","gs"))}'
Observação: está permitindo o ponto e a vírgula para localidades que usam vírgula como separador decimal.
Por favor, dê uma olhada em mpstatcomo apresentado aqui, pode ser mais adequado às suas necessidades.
Responder2
Para reformular sua pergunta: Você deseja imprimir a primeira palavra após a string "mark:".
No caminho, no awk:
echo "random string random string mark: abcde random string random string" | \
awk -v RS="mark: " 'NR==2{print $1}'
O procedimento acima divide a string em dois registros separados por "mark:" e depois imprime a primeira palavra do segundo registro (que é "abcde").
Em sed:
echo "random string random string mark: abcde random string random string" | \
sed 's/.*mark: \([^ ]*\).*/\1/'
O texto acima usa expressões regulares para encontrar a primeira palavra sem espaço após a "marca:" e substitui a string inteira por essa palavra.