[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [shell-script] Separando trechos de arquivo,
Andrea VB <=