zzfutebol quebrada no BSD (awk) #170

Closed
aureliojargas opened this Issue Mar 3, 2015 · 13 comments

Projects

None yet

3 participants

@aureliojargas
Member

Aqui no meu Mac (que usa o awk do BSD, que é diferente daquele do Linux), a função não retorna nada:

$ zzfutebol

$
  • O lynx baixou os dados do site, tudo certo.
  • A variável $listajogos está vazia, então o awk não "grepou" nada.

Testei aqui e meu awk suporta \t, + e [:alpha:] nas regex, então não seria este o problema. Também não usa o ou | nas regex, que poderia ser outra fonte de problema no BSD.

Como não manjo nada de awk, não tenho mais ideias. @itamarnet? @faustovaz?

Independente deste problema, uma sugestão que dou pra simplificar o código, é apagar todos os tabs (ou trocá-los por espaços) antes do awk. Assim você não precisa se preocupar com eles nas regex.

$ZZWWWDUMP $url | tr -d '\t' | awk '{
    # ...
}'
@aureliojargas
Member

Brinquei um pouco aqui com o arquivo baixado (guardei em foo.txt) e pelo que entendi, se grepar as linhas com datas e as linhas com _____, o resultado virá na ordem correta de data + times, em duas linhas.

$ cat foo.txt | egrep '03/03/15|___'  | head
   ____________________
   03/03/15 15h00 Copa da Alemanha
   BAY Bayer Leverkusen   ____________________ X ____________________   Kaiserslautern KAI
   03/03/15 15h00 Copa da Alemanha
   AAL Aalen   ____________________ X ____________________   Hoffenheim HOF
   03/03/15 15h00 Pernambucano
   APE América-PE  _____________________ X_____________________   Porto-PE CAP
   03/03/15 16h30 Copa da Alemanha
   FRE Freiburg   ____________________ X ____________________   Colônia KLN
   03/03/15 16h30 Copa da Alemanha
$

Em sed, eu juntaria os pares de linhas, sempre iniciando com a linha que começa com uma data:

$ cat foo.txt | egrep '03/03/15|___' | sed 's/^ *//' | sed -n '/^[0-9]/ { N; s/\n/ /p; }'
03/03/15 15h00 Copa da Alemanha BAY Bayer Leverkusen   ____________________ X ____________________   Kaiserslautern KAI
03/03/15 15h00 Copa da Alemanha AAL Aalen   ____________________ X ____________________   Hoffenheim HOF
03/03/15 15h00 Pernambucano APE América-PE  _____________________ X_____________________   Porto-PE CAP
03/03/15 16h30 Copa da Alemanha FRE Freiburg   ____________________ X ____________________   Colônia KLN
03/03/15 16h30 Copa da Alemanha DDR Dynamo Dresden   ____________________ X ____________________   Borussia Dortmund BVB
03/03/15 16h45 Inglês AST Aston Villa   ____________________ X ____________________   West Bromwich Albion WBA
03/03/15 16h45 Inglês HUL Hull City   ____________________ X ____________________   Sunderland SUN
03/03/15 16h45 Inglês SOU Southampton   ____________________ X ____________________   Crystal Palace CRY
03/03/15 17h00 Copa da França BOU Boulogne   ____________________ X ____________________   Saint-Etienne SET
03/03/15 19h45 Libertadores BGU Barcelona-EQU   ____________________ X ____________________   Libertad LIB
03/03/15 20h00 Copa do Nordeste FOR Fortaleza   ____________________ X ____________________   River-PI RAC
03/03/15 20h00 Gaúcho AIM Aimoré-RS  _____________________ X_____________________   São José-RS SJO
03/03/15 20h00 Pernambucano VCR Vera Cruz   ____________________ X ____________________   Atlético-PE APE
03/03/15 20h00 Pernambucano PES Pesqueira   ____________________ X ____________________   Ypiranga-PE YPI
03/03/15 20h45 Libertadores MIN Mineros de Guaiana   ____________________ X ____________________   Universitario de Sucre UNS
03/03/15 21h30 Copa do Brasil VLH Vilhena   ____________________ X ____________________   Ponte Preta PON
03/03/15 22h00 Libertadores CRU Cruzeiro   ____________________ X ____________________   Huracán HUR

Daí pra frente seria uma questão de formatar o resultado, mas as informações já estão agrupadas em linhas.

Não sei como fazer algo similar em awk, mas talvez essa ideia de primeiro usar o grep para já limpar inicialmente o resultado, deixando somente as linhas que interessam, simplificará as coisas.

@itamarnet
Contributor

Aurelio, agora estou longe do meu micro, mas como sugestão na função original tenta isso na linha 42:

if(imprimir==1){ no lugar de if(imprimir){

@itamarnet
Contributor

Aproveitando um pouco da sua idéia, mais um pitacos meus, refiz o código misturando sed, awk e grep.
Acho que esse deve funcionar também no MAC ou qq outro BSD.
Referência commit dbf33a2

@itamarnet itamarnet closed this Mar 4, 2015
@aureliojargas
Member

Show, agora está funcionando, valeu @itamarnet!

Só achei um probleminha:

$ zzfutebol
04/03/15 15h00 Copa da Alemanha                     RB Leipzig  x  Wolfsburg             
04/03/15 15h00 Copa da Alemanha              Arminia Bielefeld  x  Werder Bremen         
04/03/15 16h00 Copa do Brasil                      Boavista-RJ  x  ABC                   
04/03/15 16h00 Copa do Rei                          Villarreal  x  Barcelona             
04/03/15 16h30 Copa da Alemanha              Kickers Offenbach  x  Borussia Mgladbach    
[...]
07/03/15 16h00 Paulista                                 Ituano  x  Rio Claro             
07/03/15 16h00 Paulista                           São Bernardo x  São Bento            
07/03/15 16h15 Português               07/03/15 16h45 Italiano                                  Milan  x  Hellas Verona         
07/03/15 18h00 Cearense                                  Ceará x  Fortaleza             
07/03/15 18h00 Espanhol                            Granada-ESP  x  Málaga               
[...]
08/03/15 17h00 Gaúcho                                 Avenida  x  Passo Fundo           
08/03/15 17h00 Gaúcho                             Cruzeiro-RS  x  São Paulo-RS         
08/03/15 17h00 Português                             Sporting  x  Penafiel              
08/03/15 18h00 Gaúcho                  08/03/15 18h30 Carioca                              Fluminense  x  Botafogo              
08/03/15 18h30 Paranaense                             Coritiba  x  Londrina-PR           
08/03/15 18h30 Paulista                            Botafogo-SP  x  Santos                
08/03/15 19h00 Carioca                             Barra Mansa  x  Madureira             
[...]

Cortei algumas linhas da saída, mas veja como há duas linhas ali que "encavalaram", mostrando duas datas na mesma linha.

No teu também acontece isso?

@aureliojargas aureliojargas reopened this Mar 4, 2015
@itamarnet
Contributor

Realmente não sei se isso acontece, mesmo porque não previ isso.
A noite em casa verifico, e corrijo.

@itamarnet
Contributor

Aurelio aqui não acontece, a saída sai perfeita. Deve ser alguma nova incompatibilidade, mas que aqui não consigo decifrar.
Pode me mandar a saída desse comando?

$ZZWWWDUMP http://esporte.uol.com.br/futebol/agenda-de-jogos | sed -n '/[0-9]h[0-9]/p;/_ X/p'

Assim posso analisar melhor o que difere.

@aureliojargas
Member

Segue saída, resumida:

$ $ZZWWWDUMP http://esporte.uol.com.br/futebol/agenda-de-jogos | sed -n '/[0-9]h[0-9]/p;/_ X/p'
[...]
   07/03/15 16h00 Mineiro
   TOM Tombense-MG   ____________________ X ____________________   URT URT
   07/03/15 16h00 Paulista
   ITU Ituano   ____________________ X ____________________   Rio Claro RCL
   07/03/15 16h00 Paulista
   SBE São Bernardo  _____________________ X_____________________   São Bento SBE
   07/03/15 16h15 Português
   07/03/15 16h45 Italiano
   MIL Milan   ____________________ X ____________________   Hellas Verona HVE
   07/03/15 18h00 Cearense
   CEA Ceará  _____________________ X_____________________   Fortaleza FOR
   07/03/15 18h00 Espanhol
   GRA Granada-ESP   ____________________ X ____________________   Málaga MAL
[...]

Realmente ele não vem com a linha dos times, naquele horário específico.

Deixa eu ver os dados originais como estão:

Novelli Jr.

   ITU Ituano   ____________________ X ____________________   Rio Claro RCL
   Novelli Jr. Itu
   07/03/15 16h00 Paulista

Primeiro de Maio

   SBE São Bernardo  _____________________ X_____________________   São Bento SBE
   Primeiro de Maio São Bernardo do Campo
   07/03/15 16h15 Português

Bonfim

   VIS Vitória de Setúbal ______________________ ______________________   Belenenses BEL
   Bonfim Setúbal
   07/03/15 16h45 Italiano

San Siro (Giuseppe Meazza)

   MIL Milan   ____________________ X ____________________   Hellas Verona HVE
   San Siro (Giuseppe Meazza) Milão
   07/03/15 18h00 Cearense

Olha só! O ___ X ___ não é padrão, às vezes vem sem espaço e às vezes vem sem X! Por isso a linha dos times não foi grepada...

@itamarnet
Contributor

Cara que inusitado!
Isso parece ser alguma diferença no comportamento do lynx entre Linux e BSD.
Testei em casa em 3 máquinas diferentes com Slackware, Ubuntu e Mint, e em todas as respostas foram tranquilas.
Vou pensar melhor em como contornar esse problema, e depois pedirei que teste de novo!

E tentar identificar que comportamento é esse que muda entre os 2 sistemas.

@aureliojargas
Member

Opa, fiz a correção no 82773a7, depois vê aí na tua se ficou legal.

@aureliojargas
Member

Nesse caso, independente do problema bizarro que causou a diferença, o que fiz foi normalizar os dados, transformando todas as variações em ___ X ___, assim o algoritmo no awk não precisa se preocupar com isso.

No final, também normalizei a saída, que aqui aparecia de maneira variada, tipo:

Time1  x  Time2
Time1 x Time2
Time1 x  Time2

Agora é sempre igual, com somente um espaço ao redor do x. Se quiser mudar pra dois espaços, está fácil.

@itamarnet
Contributor

Perfeito!
Vi o código e acho que funciona sim.
Infelizmente onde estou não dá pra testar, mas em casa verifico.
Valeu!

@faustovaz
Contributor

E ai pessoal, blz?
cheguei bem tarde na conversa. Fiz um teste com uma imagem do freebsd no virtualbox e a função, com as alterações que você fizeram, rodou normalmente.

@itamarnet
Contributor

Aqui ficou perfeito.......!!
Ótimo!!!

@itamarnet itamarnet closed this Mar 5, 2015
@aureliojargas aureliojargas modified the milestone: Versão 2015 Mar 22, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment