[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: |
Wed, 7 Apr 2010 17:00:58 -0300 |
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