Como fazer este comando awk funcionar

Como fazer este comando awk funcionar

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.

informação relacionada