shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Trabalhando com vetores e combinações em shell script


From: Thobias Salazar Trevisan
Subject: Re: [shell-script] Trabalhando com vetores e combinações em shell script
Date: Sat, 24 May 2003 13:33:25 -0300 (BRT)

ae rodolfo,

On Fri, 23 May 2003, Rodolfo Villanova wrote:

> Queria algo do tipo que sei funcionar em bash:
>
> > declare -a alfabeto[]=(A B C D E F G H I J K L M N O P Q R S T
> > U V W X Y Z)
> > echo ${alfabeto[2]}
> > C

isso você pode usar o sed pra simular. olhe:

$ alfabeto='A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'
$ echo $alfabeto | sed  's/^\([^ ] \)\{4\}.*/\1/'
  D
$ echo $alfabeto | sed  's/^\([^ ] \)\{1\}.*/\1/'
  A
$ echo $alfabeto | sed  's/^\([^ ] \)\{20\}.*/\1/'
  T

Basta trocar o valor entre {}, para a posição desejada.


> Já queimei minha cota de fosfato em algumas alternativas de
> solução do seguinte desafio:
> Guardo num arquivo chaves de pesquisa com o seguinte formato:
> AA99, onde :
>       AA = combinação das letras do alfabeto, de AA até ZZ;
> e
>       99 = combinação dos numerais, de 01 até 99.
>
> Meu script vai pegar a última chave inserida na última linha
> desse arquivo e incrementar o valor para obter a próxima chave
> a ser criada, que será inserida no final desse mesmo arquivo.
>
> Alguém conhece uma alternativa simples, o "Ovo de Colombo"?
> Sei que seria mais fácil realizar isso utilizando outras linguagens,
> mas preciso fazê-lo em script Korn Shell.
> Também não vale mudar essa chave-identificadora para que seja
> somente numérica.
> Awk ou Sed me ajudariam de alguma forma?

acho que pra isto você precisa de od, awk, bc e sed ;)
como não sei o que funciona em Korn Shell, não otimizei muita
coisa, o código pode ser bem menor se utilizar algumas
construções simples de bash.
como está, fica mais fácil para você adaptar caso ocorra algum
problema no seu ambiente. Ah, e mais legível tamvém ;)

$ cat script.sh
#!/bin/bash

a=`echo $1 | cut -c1`
b=`echo $1 | cut -c2`
n=`echo $1 | cut -c3-4`

let n=$n+1
if [ $n = 100 ]
then
        n=0
        b=`echo -n $b | od -d | sed -n '1s/[^ ]* *//p'`+1
        b=`echo $b | bc`
        if [ $b -gt 90 ]
        then
                b=65
                a=`echo -n $a | od -d | sed -n '1s/[^ ]* *//p'`+1
                a=`echo $a | bc`
                if [ $a -gt 90 ]
                then
                        a=65
                fi
        fi
fi
echo $a $b $n | gawk '{printf("%c%c%02d\n",$1,$2,$3)}'
########################################################

Testando:

$ script.sh AA00
AA01

$ script.sh AA99
AB00

$ script.sh AZ99
BA00

$ script ZZ99
AA00

blz ?

thobias
-------
echo 9446046325380026818553633794429812592304650P | dc
-------
http://www.lcp.coppe.ufrj.br/~thobias

____________________________
|
| Against - HTML Mail
| Against - MS ATTACHMENTS
|
----------------------------



reply via email to

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