Grep e remover linhas com um valor de campo em branco

2

Eu queria saber se há algum comando para procurar valores de campo em branco de um arquivo de texto e remover a linha inteira.

Exemplo

 Hello:Its Me
 Hello:How are you
 Hello:
 Hello:Bye

E saída esperada

 Hello:Its Me
 Hello:How are you
 Hello:Bye
    
por John Wick 13.12.2017 / 17:05

4 respostas

5

Caso muito padrão, a solução mais simples com awk seria

awk -F: '$2 != ""' file

e com grep :

grep :. file 
    
por 13.12.2017 / 17:10
3

Se você quiser ignorar Hello: linhas, pode usar algo como:

awk -F: '{if($2 != "") print }' input_file 
    
por 13.12.2017 / 17:08
2

Pelo menos com o GNU awk, e acho que com qualquer versão do awk, a ação padrão quando algo é avaliado como true é imprimir. Portanto, se você definir o delimitador de campo como : , para imprimir linhas que tenham um segundo campo, tudo o que você precisa é:

$ awk -F: '$2' file
Hello:Its Me
Hello:How are you
Hello:Bye

No entanto, isso também imprimirá casos em que o segundo campo é espaço em branco (um espaço ou uma tabulação etc), mas não imprimirá a linha se o segundo campo for um ou vários 0 s , porque awk avalia isso como falso.

    
por 13.12.2017 / 21:59
0

Às vezes, é mais fácil definir as condições de remoção ( grep -v ). Exemplo remove quando o último campo está vazio:

grep -v ':$' file
    
por 14.12.2017 / 11:17