Como extrair apenas valores maiores que um limite de um arquivo?

5

Eu tenho este arquivo:

names average
john:15.02
Mark:09.63
James:12.58

Eu quero extrair somente as médias maiores que 10, então a saída neste exemplo deve ser:

15.02
12.58
    
por Haikel Fazzani 18.12.2017 / 20:09

2 respostas

9

com awk

$ awk -F: '{if(>10)print}' <filename
15.02
12.58

Explicações

  • -F: - define o separador F ield como :
  • {if(>10)print} - para cada linha, teste se o campo 2 nd é >10 , se assim for print it
  • <filename - deixa o shell abrir o arquivo filename , melhor que deixar awk fazer isso, veja resposta do Stéphane Chazelas sobre o tema

Também é possível adicionar espaços e colocar o padrão fora dos colchetes, então eles são iguais - graças a Stefan apontando isso:

$ awk -F: '{if(>10)print}' <filename
$ awk -F: '{ if (  > 10 ) print  }' <filename
$ awk -F: '>10{print}' <filename
$ awk -F: ' > 10 { print  }' <filename
    
por dessert 18.12.2017 / 20:13
3

Com o grep, você teria que trabalhar com expressões regulares; por exemplo,

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2

como com sed:

sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)//p' file

Mas o uso do RegEx em dados ordenados é propenso a erros (na minha experiência) e difícil de ler; -).

    
por Stefan 18.12.2017 / 23:10