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: Andrea VB
Subject: Re: [shell-script] Separando trechos de arquivo
Date: Mon, 28 Jun 2010 01:01:51 -0300

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 <address@hidden>:
> 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
>
> andreavb@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.


reply via email to

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