Advertisement
darsinqauros

Resposta para "Contar número de campos de uma linha"

Aug 10th, 2011
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.61 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #UMA POSSÍVEL SOLUÇÃO PARA O TÓPICO :: CONTAR NÚMEROS DE CAMPOS DE UMA LINHA
  4.  
  5. #DESCRIÇÃO DO PROBLEMA
  6. #Preciso "contar" o número de campos de uma linha de um arquivo no formato:
  7. #1996062519*20110530*08312100*1996062515*0,70*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  8. #1996062519*20110602*09402000*1996062528*7,80*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  9. #1996062519*20110602*10291200*1996062510*16,50*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  10. #1996062519*20110515*18024600*1996062511*1,00*0,21*TORPEDO VIVO FLEXIVE*UTILIZAÇÃO ACIMA DO CONTRATADO
  11. #1996062519*20110507*10470400**1,00*2,21*SINCRONISMO INICIAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  12. #1996062519*20110523*11443600**1,00*0,36*ATUALIZACAO AGENDA*UTILIZAÇÃO ACIMA DO CONTRATADO
  13. #
  14. #o arquivo "tem" que conter 8 campos por linha. Preciso que o numero de
  15. #campos seja retornado para que quando a linha contiver, no caso, menos
  16. #que 8 campos ele execute determinada ação(incluir um campo em branco
  17. #após o terceiro campo). Os campos são separados por *.
  18. #
  19. #A POSSÍVEL SOLUÇÃO
  20.  
  21. arquivo="$HOME/teste.texto"
  22.  
  23. cat - >> "$arquivo" <<EOF
  24. 1996062519*20110530*08312100*1996062515*0,70*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  25. 1996062519*20110602*09402000*1996062528*7,80*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  26. 1996062519*20110602*10291200*1996062510*16,50*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  27. 1996062519*20110515*18024600*1996062511*1,00*0,21*TORPEDO VIVO FLEXIVE*UTILIZAÇÃO ACIMA DO CONTRATADO
  28. 1996062519*20110523*11443600*1,00*0,36*LINHA TESTE*LINHA TESTE
  29. 1996062519*20110507*10470400**1,00*2,21*SINCRONISMO INICIAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  30. 1996062519*20110523*11443600**1,00*0,36*ATUALIZACAO AGENDA*UTILIZAÇÃO ACIMA DO CONTRATADO
  31. 1996062519*20110515*18024600*1996062511*1,00*0,21*TORPEDO VIVO FLEXIVE*UTILIZAÇÃO ACIMA DO CONTRATADO
  32. 1996062519*20110523*11443600*1,00*0,36*LINHA TESTE2*LINHA TESTE2
  33. 1996062519*20110530*08312100*1996062515*0,70*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  34. 1996062519*20110602*09402000*1996062528*7,80*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  35. 1996062519*20110602*10291200*1996062510*16,50*0,00*CHAMADA LOCAL*UTILIZAÇÃO ACIMA DO CONTRATADO
  36. 1996062519*20110523*11443600*1,00*0,36*LINHA TESTE3*LINHA TESTE3
  37. EOF
  38.  
  39. cat "$arquivo" | while read l
  40.    do
  41.    aux=`echo $l | egrep -v '^[0-9]{10}\*[0-9]{8}\*[0-9]{8}\*([0-9]{10}|\*)' | sed 's/\(.\{29\}\)/\1\*/'`
  42.    echo $l
  43.    echo $aux
  44.    echo ...
  45.    if ["$aux" -eq ""]
  46.       then
  47.       echo $l>> "$arquivo".result
  48.    else
  49.       echo $aux>> "$arquivo".result
  50.    fi
  51. done
  52.  
  53. exit
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement