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

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

Re: [shell-script] Separar pacote - versao de uma lista


From: Mauricio
Subject: Re: [shell-script] Separar pacote - versao de uma lista
Date: Wed, 11 Jan 2006 10:58:48 +0000
User-agent: Mozilla Thunderbird 1.0.7 (X11/20050923)

Olá Fabrício...
eu nào entendi direito o que vc está querendo... mas sugiro que em vez do cut vc use arrays para separar os seus campos definindo a variável IFS como '-'. Creio que isso tornaria o código mais fácil de ler e vc poderia analisar as posićões de cada array definindo regras de existência.
Espero ter ajudado...
Maurício

Fabricio Lopes de Souza wrote:
Estou tentando fazer um script que , de uma lista com pacotes , separe
por nome de programa e versao .
a lista eh mais ou menos essa :
[lista]
iputils-20020927-11.30.1
irda-utils-0.9.15-1
isdn4k-utils-3.1-76
jakarta-regexp-1.2-12
jfsutils-1.1.2-2
jpackage-utils-1.5.38-1jpp_5rh
jwhois-3.2.2-1
kbd-1.08-10.2
kdebase-3.1.3-5.9
kdelibs-3.1.3-6.10
kernel-2.4.21-15.EL
kernel-2.4.21-27.0.4.EL
kernel-2.4.21-32.0.1.EL
kernel-pcmcia-cs-3.1.31-13
kernel-smp-2.4.21-15.EL
kernel-smp-2.4.21-27.0.4.EL
kernel-smp-2.4.21-32.0.1.EL
kernel-utils-2.4-8.37.12
krb5-libs-1.2.7-47
krb5-workstation-1.2.7-47
krbafs-1.1.1-11
krbafs-utils-1.1.1-11
kudzu-1.1.22.11-1
[/code]


o codigo que eu fiz ateh agora foi esse

[script]
lista1="/Fabricio/scripts/s.pi7"
lista2="/Fabricio/scripts/s.pi10"
tmp1="/tmp/lista1"
tmp2="/tmp/lista2"

while read program ; do
   let i=2
   for field in "1" "1,2" "1,2,3" ; do
      version=$(echo $program | cut -d"-" -f${i})
      version=$(echo $version |  sed 's/[a-zA-Z]\{6,\}.*//g' )
      version=$(echo $version | sed s/[^0-9]//g )
      version=$(echo $version | sed s/\./1234567/g )
         #if [[ $version == [^A-Za-z]*[0-9]* ]] ; then
         if [[ ${#version} -ge 1 ]] ; then
            version=$(echo $program | cut -d"-" -f${i}-9)
            program=$(echo $program | cut -d"-" -f"$field")
            echo "$program $version" | awk '{ printf "| %30-s --|--
%18s |\n",$1,$2}'
            grep -v $program $tmp1 > $tmp2
            mv $tmp2 $tmp1
            flag=1
            break
         fi
   done
done < $lista1
[/script]

tentando explicar :
primeiramente eu jah chego a conclusao que o nome do pacote é no
mínimo o primeiro campo com separador "-" e , logicamente , a versão é
do segundo campo para frente
condicoes o campo ser versao :
conter "."
conter mais de 1 numero
porem :
existem pacotes com numeros no nome

o que esta sendo complicado é definir o que é um campo de versão ,
pois depois de achar este campo , todos os seguintes fazem parte da
versão !


alguem tem alguma ideia ou ajuda ?? :)


---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como 
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio 
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em 
http://www.listas-discussao.cjb.net
---------------------------------------------------------------------
Links do Yahoo! Grupos









reply via email to

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