Contar vezes que uma expressão é verdadeira no awk.

1

No código unix / awk

Essencialmente, eu preciso percorrer o arquivo (data1.txt) e contar o número de vezes que o substr ($ 0,29,2) de cada linha do arquivo == "04".

data1.txt:

6597243042 20160305001100003140152852153019000127000200
6597243042 20160305001100003140170306190306020000000200
6597243042 20160305001100003140170552190552020000000200
6597243042 20160305001100003140201430201543000113000400
6592311319 20160305041100003460072719072839000120001200
6592311319 20160305041100003460072927072952000025001200

Nesse caso, apenas duas linhas do arquivo (data1.txt) preenchem a condição (substr ($ 0,29,2) == "04")

Estou empenhado em encontrar uma maneira de fazer isso

Abaixo está o meu código unix / awk

Filename="def"
file="data1.txt"
#awk '{count1=0}'
while IFS= read line
do

   awk '{ if (substr($0,29,2)=="04") {print substr($0,29,4)}}' 

done <"$file"

Como posso contar isso?

    
por John 27.03.2016 / 15:20

2 respostas

4

Outra abordagem (graças ao Archemar + kos para evitar o uso de egrep e usar -c )

grep -cE '^.{28}04' data1.txt
    
por 27.03.2016 / 19:04
3

simplesmente tente

awk 'BEGIN { count = 0 ;} substr($0,29,2) == "04" { count++ ; } END { print count ;}' files

onde

  • substr($0,29,2) == "04" search fo condition
  • { count++ ; } se encontrado aumentar contagem
  • END no final
  • { print count ;} imprima.

editar:

  • count=0 graças a @steeldriver

A linha de comando do awk pode ser inserida como abaixo para facilitar a leitura.

awk 'BEGIN { count = 0 ;} 
     substr($0,29,2) == "04" { count++ ; } 
     END { print count ;}' files
    
por 27.03.2016 / 17:16