Como fazer este comando awk funcionar

0

Eu quero fazer o comando abaixo do trabalho, mas não posso. Por favor, verifique isso:

echo "random string random string mark: abcde random string random string" |
    awk '{gensub(/^.*mark: (.{5,5}).*$/,"\1","g"); print}'

Eu quero que este comando retorne apenas "abcde". Mas está sempre retornando a string de entrada inteira. Por quê?

    
por Samul 01.11.2015 / 16:09

2 respostas

1

O comando gensub não altera a string. O resultado é uma saída da função.

Por favor, tente:

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 isso faz (como o usuário pergunta):

top -b -n 1 -d 1 |
awk 'NR==1{print(gensub(/.*load average: ([0-9\.\, ]+).*$/,"\1","gs"))}'

Observação: ele permite tanto o ponto quanto a vírgula para códigos de idioma que usam uma vírgula como separador decimal.

Por favor, dê uma olhada no mpstat como aqui apresentado , pode ser melhor para suas necessidades.

    
por 01.11.2015 / 16:27
1

Para reformular sua pergunta: você deseja imprimir a primeira palavra após a string "mark:".

A caminho, no awk:

echo "random string random string mark: abcde random string random string" | \
awk -v RS="mark: " 'NR==2{print $1}'

O acima divide a string em dois registros separados por "mark:" e depois imprime a primeira palavra do segundo registro (que é "abcde").

No sed:

echo "random string random string mark: abcde random string random string" | \
sed 's/.*mark: \([^ ]*\).*//'

O texto acima usa expressões regulares para encontrar a primeira palavra não espacial após a "marca:" e substitui toda a cadeia pela palavra.

    
por 01.11.2015 / 17:34