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: 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


reply via email to

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