Olá, pessoal! Ressucitando um e-mail bastante antigo... A solução do Tiago e do Julio resolveu perfeitamente meus problemas, durante alguns meses. Mas o awk não dá conta de processar muitos arquivos gerados, e exibe uma mensagem de erro.
Como dá pra entender o problema sem muita enrolação, vou apelar pro top-posting mesmo. Quem quiser mais detalhes lê o que está abaixo. Meu problema: dividir um arquivo em vários outros, usando como chave de busca "Event ". Solução apresentada: awk '/\[Event \"/{ i++; } { print >> "split_" i;}' meuarquivo Erro recebido: "cannot open split_1021 for output (too many open files)" Solução-da-solução encontrada: awk '/\[Event \"/{close("split_"i); i++; } { print >> "split_" i;}' meuarquivo Abraço! 2010/4/7 Andrea VB <andreavb1...@gmail.com>: > Grande Julio! > > 2010/4/7 Julio C. Neves: >> Ô 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 > > Não é que a solução dele seja complicada, é que eu achei que haveria > uma forma mais direta, sem precisar criar tantos arquivos - 8662 aqui, > considerando as partidas do último mês. :) > Eu imaginava alguma mágica no sed, hehe. > > Mas a solução ajudou, sim, com certeza! Com seu empurrão final, então, > perfeito! > > Os arquivos PGN se chamam twicXXX.pgn, de 1 a 804. Então, montei o > script de forma que o usuário possa especificar o intervalo desejado > (no exemplo abaixo, eu busquei somente partidas do último mês). > > E 15 jogos de meu interesse foram encontrados. :-) > > Obrigada!! > > Abraço, > Andrea VB > > andre...@zugzwang:~/Documentos/chess$ cat select.sh > #!/bin/bash > > usage () { > echo "Usage: $0 <firstTWIC> <lastTWIC> <opening>" 1>&2 > } > > i=$1 ; test -z "$i" && { > usage > exit 1 > } > > f=$2 ; test -z "$f" && { > usage > exit 1 > } > > opening=$3 ; test -z "$opening" && { > usage > exit 1 > } > > # The format of the file is twicXXX.pgn, but it may change... > prelink="twic" > poslink=".pgn" > > while [ $i -le $f ] > do > link=${prelink}${i}${poslink} > awk '/\[Event \"/{ i++; } { print >> "split_" i;}' $link > cat $(grep -lF "${opening}" split_*) >> interesse.pgn > rm split* > let "i = i + 1" > done > exit 0 > > $ time ./select.sh 801 804 "1. d4 d5 2. c4 c6 3. e3" > > real 0m2.494s > user 0m1.540s > sys 0m0.896s > -- Andrea VB Please, don't CC me when replying to me on the lists, and use BCC when sending mass e-mails.