Filtrar impressão do conteúdo da linha no awk/sed/linux

1. Filtrar impressão do conteúdo da linha no awk/sed/linux

Vinicius Rios Gianezi
ViniGianezi

(usa Ubuntu)

Enviado em 11/11/2014 - 04:18h

Boa noite meus caros!

Estou com um caso em que preciso imprimir apenas palavras específicas de um arquivo texto usando a linguagem awk.
Por exemplo, se na linha estiver escrito "Papai comprou uma bola quadrada", desejo que o linux identifique se na linha existe a palavra 'bola' e, em caso afirmativo, imprima apenas esta palavra da linha.

Ficarei eternamente grato a quem me passar a solução!
Um abraço a todos.


  


2. Solução

Vinicius Rios Gianezi
ViniGianezi

(usa Ubuntu)

Enviado em 13/11/2014 - 08:58h

Galera, enquanto ninguém me respondia, debrucei de cara em pesquisas pela web, até que finalmente encontrei a solução para o meu caso. E achei por bem compartilhar neste fórum pois outros usuários Linux com certeza terão a mesma dificuldade.
Exemplo: localizar determinado padrão definido numa ER e imprimir apenas eles um em cada linha.

Arquivo:
Papai comprou uma bola quadrada vermelha.
João jogou futebol na quadra da escola.
O quadro da sala está quebrado.

Imaginemos que seja necessário exibir apenas a cadeia que coincidir com [a-Z]* q*.
Usamos o comando 's///' do sed (representa o recurso "localizar e substituir" do notepad++ e do bloco de notas) da seguinte forma:

sed -e 's/\([a-Z]* q*\) /\1\n/g' arquivoEntrada > arquivoSaida,
onde a ER foi colocada em uma "região", que no sed deve ser colocada entre os símbolos '\(' e '\)'.

No caso, só defini uma única região para minha expressão, então depois do segundo barra normal '/' coloquei \1 (para manter a 1ª região) e em seguida pular uma linha (\n). Ficará assim:

Arquivo:
Papai comprou uma bola quadrada
vermelha.
João jogou futebol na quadra
da escola.
O quadro
da sala está quebrado
.

Vejam que a cadeia que queremos (palavras iniciadas pela letra 'q') ficam todas na última coluna de cada linha que a contém, e então é só usar um comando sed com if para imprimir apenas a última coluna {print $NF} caso a mesma inicie com q* (if $NF = q*).

Claro que esta não é a solução ideal para o caso pois requer mais de um comando, mas é oq tem pra hoje...


3. Agradeço

Jose Neto
JoseNeto

(usa Debian)

Enviado em 22/02/2017 - 08:48h

Valeu meu amigo estava com uma dificuldade de capturar apenas a % do espaço em uso de disco, tenho servidor que utilizam LVM com isso a primeira coluna as vezes era muito grande e com awk ou cut não condizia as colunas, utilizei a seguinte expressao pra pegar a maior porcentagem em uso

df -h > df.txt && sed -e 's/\([a-Z]* %*\) /\1\n/g' df.txt > df2.txt && cat df2.txt | grep % | awk -F % '{print $1}' | sort -nr | head -n1


Valeu pela dica.







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts