Como remover todas as linhas que possuem um valor na linha?

2

Eu tenho um arquivo como o seguinte

input file
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.25
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.0  
2.5  6  7  6  9 

Eu quero excluir todas as linhas que têm apenas um valor na linha, então o resultado será assim

out file  
0.0  4  6  5  1  2  9  4  5  1  ..... 
0.5  3  1  
1.0  3  7  8  2  
1.5  3  3  3  4  6  4  5   
2.5  6  7  6  9 
    
por Mohsen El-Tahawy 14.07.2016 / 23:37

3 respostas

8

Uma abordagem usando awk . Usa NF (número de campos) para imprimir apenas as linhas em que o número de campos é maior que 1.

awk <oldfile >newfile 'NF>1'

Exemplo

awk <oldfile >newfile 'NF>1'
cat newfile
0.0  4  6  5  1  2  9  4  5  1  .....
0.5  3  1
1.0  3  7  8  2
1.5  3  3  3  4  6  4  5
2.5  6  7  6  9
    
por 14.07.2016 / 23:46
3

Para que haja dois ou mais números, deve haver pelo menos um separador. Se este for um space , então o grep seria simplesmente

grep ' '

Se o arquivo puder ter espaços estranhos no final da linha, procure por um espaço seguido por um dígito ou . (no caso de um número ser .25 ).

grep ' [0-9.]'

Se você pode ter espaços estranhos no início ou final e espaços extras no meio, então

grep '[0-9.]  *[0-9].'
    
por 14.07.2016 / 23:56
1

Você pode fazer isso com grep ou sed.

com sed :

sed -e '/^[[:space:]]*[[:digit:].]\+[[:space:]]*$/d' input >output

Com o grep, use a opção -E para expressões regulares e a opção -v para excluir correspondências:

grep -v -E '^[[:space:]]*[[:digit:].]+[[:space:]]*$' input >output

O motivo do padrão é ignorar linhas que não têm um valor numérico e manipular casos com espaços em branco iniciais ou finais. Se nada disso interessar, uma solução mais simples "funciona".

    
por 14.07.2016 / 23:46