shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Separando trechos de arquivo


From: Tiago Peczenyj
Subject: Re: [shell-script] Separando trechos de arquivo
Date: Wed, 7 Apr 2010 14:49:00 -0300

Descobri o comando csplit, que pode 'splitar' um arquivo por uma expressão.

csplit -z -f split teste '/evento/' '{*}'

fiquei cismado que o split normal não faz isto, mas no 'info coreutils
split' apareceu esta dica

A sintaxe esta bem explicada tanto no main quanto no Dicas-L

http://www.dicas-l.com.br/dicas-l/19970619.php

O importante dessa dica é que a sintaxe não fica poluida com algo
semelhante a algoritmos - sem falar que o coreutils tem coisas muito
boas.

2010/4/7 Julio C. Neves <address@hidden>:
> Ô Andrea, cuméque uma jogadora de xadrez pode achar a resposta do Tiago
> complicada? A solução do Tiago está ótima! Ele resolveu um problemão em 2
> linhas... A linha seguinte, que ele não escreveu, seria um grep -lF "1. d4
> d5 2. c4 c6 3. e3" split_*
>
> Esta linha produziria os nomes dos arquivos que possuem a cadeia que vc
> procura. Se vc quiser concatenar todos em um só arquivo, troque-a por:
>
> cat $(grep -lF "1. d4 d5 2. c4 c6 3. e3" split_*) > ArqConcatenado
>
> Abraços,
> Julio
> Cursos de Shell e Zenity em 2 fins de semana?
> - Floripa turma Shell 12/04 http://www.seventreinamentos.com.br;
> - DF turma de Shell em 17/04 - ligue (61) 3223-3000;
> - Aracaju turma de Shell em 12/05 - address@hidden;
> - RJ turma de Shell em 14/06 - ligue (21)2210-6061;
> - Turmas fechadas em outras cidades ligue (21)  8112-9988.
>
>
> Em 7 de abril de 2010 13:01, Andrea VB <address@hidden> escreveu:
>
>>
>>
>> Oi, Tiago, tudo bem?
>>
>> Obrigada pela pronta resposta!
>>
>> 2010/4/7 Tiago Peczenyj:
>>
>> > sugiro separar com awk
>> >
>> > $ cat teste
>> > [evento]
>> > um
>> > dois
>> > [evento]
>> > tres
>> > quatro
>> >
>> > $ awk '/\[evento\]/{ i++; } { print >> "split_" i;}' teste
>> >
>> > $ cat split_1
>> > [evento]
>> > um
>> > dois
>> >
>> > $ cat split_2
>> > [evento]
>> > tres
>> > quatro
>> >
>> > Basicamente eu somo 1 a variavel i para cada cabeçalho [evento] --
>> substitua
>> > pelo seu -- e escrevo no final do arquivo split_ concatenado com i
>> >
>> > boa sorte se isto lhe ajudar
>>
>> Ajuda, claro. :)
>> Mas daí eu teria que:
>> 1) Fazer o split dos arquivos
>> 2) Selecionar os arquivos que interessam (ié, possuem a string "1. d4
>> d5 2. c4 c6 3. e3")
>> 3) Juntar os arquivos separados no passo 2.
>>
>> Acredito que deva haver uma solução mais simples...
>> Meu problema, basicamente, é o que está entre a tag Event e o início
>> do jogo (as outras tags, por serem variáveis).
>>
>> Obrigada,
>> Andrea
>>
>> > 2010/4/7 Andrea VB:
>>
>> >
>> >>
>> >>
>> >> Boa tarde, pessoal!
>> >>
>> >> Tenho um arquivo PGN com muitas partidas de xadrez e gostaria de
>> >> automatizar a seleção das partidas que vou estudar.
>> >>
>> >> Cada partida é anotada como abaixo, sempre começando com uma tag
>> >> [Event "*"], porém sem indicativo do final -- na verdade, há vários
>> >> tipos diferentes. Portanto, vou considerar dois casos como fim de
>> >> partida:
>> >> 1) Início de outra partida
>> >> 2) Final do arquivo
>> >>
>> >> Meu objetivo: Separar as partidas começadas com determinada abertura,
>> >> por exemplo "1. d4 d5 2. c4 c6 3. e3". O problema é que eu precisaria
>> >> pegar TODO o código referente à partida (ié, desde a tag Event, não
>> >> apenas os lances).
>> >> Lembro de ter visto algo parecido em SED, em tempos muito remotos.
>> >> Porém, não encontrei as palavras-chave certas para procurar
>> >> novamente...
>> >>
>> >> Eu imaginava algo do tipo:
>> >>
>> >> $ sed '/[Event].*.1. d4 d5 2. c4 c6 3. e3.*.[Event]/p' twic801.pgn >>
>> >> gp.pgn
>> >>
>> >> porém isto não está separando nada. :(
>> >>
>> >> Alguma ajuda, ideia, qualquer coisa?
>> >> Obrigada desde já,
>> >> Andrea VB
>> >>
>> >> '''
>> >> [Event "19th Amber Blindfold"]
>> >> [Site "Nice FRA"]
>> >> [Date "2010.03.13"]
>> >> [Round "1"]
>> >> [White "Ponomariov,R"]
>> >> [Black "Gelfand,B"]
>> >> [Result "1-0"]
>> >> [WhiteElo "2737"]
>> >> [BlackElo "2750"]
>> >> [EventDate "2010.03.13"]
>> >> [ECO "D10"]
>> >>
>> >> 1. d4 d5 2. c4 c6 3. e3 Nf6 4. Bd3 Bg4 5. Ne2 e6 6. Qb3 Qc7 7. Ng3 Nh5
>> 8.
>> >> Nc3 Nd7 9. Bd2 Nb6 10. c5 Nd7 11. e4 Nxg3 12. hxg3 dxe4 13. Nxe4 Bf5 14.
>> >> Bf4 e5 15. Ng5 Nxc5 16. dxc5 Bxd3 17. O-O-O O-O-O 18. Nxf7 Rd5 19. Rxd3
>> >> Qxf7 20. Rxd5 cxd5 21. Bxe5 Bxc5 22. f4 b6 23. Qc2 Kb7 24. Rxh7 Rg8 25.
>> Kb1
>> >> a5 26. a3 d4 27. Qe4+ Ka7 28. Qd3 Qb7 29. Ka2 Qd5+ 30. Qb3 Rd8 31. Qxd5
>> >> Rxd5 32. Rxg7+ Ka6 33. Rh7 d3 34. Rh1 Bf2 35. g4 d2 36. Rd1 Be3 37. g3
>> Bf2
>> >> 38. g5 Bxg3 39. g6 Rd8 40. g7 a4 41. Rxd2 1-0
>> >>
>> >> [Event "19th Amber Blindfold"]
>> >> [Site "Nice FRA"]
>> >> [Date "2010.03.13"]
>> >> [Round "1"]
>> >> [White "Grischuk,A"]
>> >> [Black "Kramnik,V"]
>> >> [Result "1-0"]
>> >> [WhiteElo "2756"]
>> >> [BlackElo "2790"]
>> >> [EventDate "2010.03.13"]
>> >> [ECO "D38"]
>> >>
>> >> 1. d4 Nf6 2. c4 e6 3. Nf3 d5 4. Nc3 Bb4 5. cxd5 exd5 6. Bg5 Nbd7 7. Qc2
>> O-O
>> >> 8. a3 Bxc3+ 9. Qxc3 h6 10. Bh4 c5 11. Nd2 c4 12. g4 b5 13. Bg2 Nb6 14.
>> h3
>> >> Re8 15. e3 a5 16. O-O Qd6 17. Qc2 Bd7 18. Rfe1 Rac8 19. Bg3 Qc6 20. Be5
>> b4
>> >> 21. axb4 axb4 22. e4 c3 23. exd5 Nfxd5 24. bxc3 bxc3 25. Ne4 Qg6 26. Qb3
>> c2
>> >> 27. Nc5 Rxe5 28. Rxe5 Nf4 29. Rc1 Bc6 30. Qxb6 Nxg2 31. Qa6 Ra8 32. Qd3
>> Nh4
>> >> 33. Re3 Qg5 34. Ne4 Nf3+ 35. Kg2 Qf4 36. d5 Ne5 37. Qxc2 Bxd5 38. Rd1
>> Nxg4
>> >> 39. hxg4 Qxg4+ 40. Kf1 Ra2 41. Qd3 Qh4 42. Nf6+ gxf6 43. Rg3+ 1-0
>> >> '''
>>
>> --
>> Andrea VB
>> Please, don't CC me when replying to me on the lists, and use BCC when
>> sending mass e-mails.
>>
>>
>
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>
>
> ------------------------------------
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como 
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em 
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
> Servidor Newsgroup da lista: news.gmane.org
> Grupo: gmane.org.user-groups.programming.shell.brazil
>
> Links do Yahoo! Grupos
>
>
>



-- 
Tiago B. Peczenyj
Linux User #405772

http://pacman.blog.br


reply via email to

[Prev in Thread] Current Thread [Next in Thread]