Atribuir Sequencial com letras ao invés de números [RESOLVIDO]

1. Atribuir Sequencial com letras ao invés de números [RESOLVIDO]

Guilherme Andrade
gjudice

(usa Solaris)

Enviado em 07/08/2021 - 18:51h

Amigos, boa noite!

Sou novato nesse mundo e estou tendo dificuldades com algumas questões, tentei achar algum tópico que pudesse ajudar ou algo no google, mas não tive sucesso...vamos ao causo...

Eu tenho um diretório onde são gravados N arquivos nele, a principio 4,mas pode expandir com o tempo, eles geram um padrão definido em: CAD_PG_CREDITO_0001, CAD_PG_DEBITO_0002, CAD_PG_CREDITO_0003, CAD_PG_DEBITO_0004 e assim sucessivamente...e eu preciso que esses arquivos sejam renomeados tipo: CAD_PG_A.dat, CAD_PG_B.dat, CAD_PG_C.dat, CAD_PG_D.dat e assim sucessivamente também...

Eu não consegui fazer de forma direta que seja incrementado usando letras ao invés de números...e acabei fazendo de forma tosca para atender, por enquanto, já que não obtive sucesso :(

A forma foi:

N=1
for arquivos in CAD_PG*
do
mv $arquivos CAD_PG_$N.dat
N=$(($N+1))
done
mv CAD_PG_1.dat CAD_PG_A.dat
mv CAD_PG_2.dat CAD_PG_B.dat
mv CAD_PG_3.dat CAD_PG_C.dat
mv CAD_PG_4.dat CAD_PG_D.dat
.
.
.
Que como saída do FOR tenho padrão: CAD_PG_1.dat, CAD_PG_2.dat etc fazendo um mv para o A B C D...

Tá claro que essa automação é bemmmm deficiente e não estou conseguindo caminhar além disso, já fundi meu tico e teco :(

Qual seria a melhor forma de atender essa necessidade? Existe a possibilidade de incrementar com letras ao invés de números?

Obrigado a todos pelo espaço e conhecimento

Abssss


  


2. Re: Atribuir Sequencial com letras ao invés de números [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 07/08/2021 - 22:10h


gjudice escreveu:

Amigos, boa noite!

Sou novato nesse mundo e estou tendo dificuldades com algumas questões, tentei achar algum tópico que pudesse ajudar ou algo google, mas não tive sucesso...vamos ao causo...

Eu tenho um diretório onde são gravados N arquivos neles, a principio 4,mas pode expandir com o tempo, eles geram um padrão definido em: CAD_PG_CREDITO_0001, CAD_PG_DEBITO_0002, CAD_PG_CREDITO_0003, CAD_PG_DEBITO_0004 e assim sucessivamente...e eu preciso que esses arquivos sejam renomeados tipo CAD_PG_A.dat, CAD_PG_B.dat, CAD_PG_C.dat, CAD_PG_D.dat e assim sucessivamente também...

Eu não consegui fazer de forma direta que seja incrementado usando letras ao invés de números...e acabei fazendo de forma tosca para atender por enquanto, já que não obtive sucesso :(

Forma foi:

N=1
for arquivos in CAD_PG*
do
mv $arquivos CAD_PG_$N.dat
N=$(($N+1))
done
mv CAD_PG_1.dat CAD_PG_A.dat
mv CAD_PG_2.dat CAD_PG_B.dat
mv CAD_PG_3.dat CAD_PG_C.dat
mv CAD_PG_4.dat CAD_PG_D.dat
Que após sair do FOR tenho padrão CAD_PG_1.dat, CAD_PG_2.dat etc fazendo um mv para o A B C D...
Tá claro que essa automação é bemmmm deficiente e não estou conseguindo caminhar além disso, já fundi meu tico e teco :(
Qual seria a melhor forma de atender essa necessidade? Existe a possibilidade de incremental com letras invés de números?
Obrigado a todos pelo espaço e conhecimento
Abssss

Boa noite Guilherme Andrade,
Segue sugestão:
ls -1 Documentos/
CAD_PG_CREDITO_000
...
CAD_PG_CREDITO_025
---------------------------------
ltr=$(printf "%s" {A..Z})
echo $ltr
ABCDEFGHIJKLMNOPQRSTUVWXYZ
-----------------------------------------------------------
N=0;
for arq in Documentos/*;do
echo "mv \"$arq\" para \"${arq//[0-9]}${letras:$N:1}\""; #Usei o 'echo' para testes....
let N++;
done

mv "Documentos/CAD_PG_CREDITO_000" para "Documentos/CAD_PG_CREDITO_A"
mv "Documentos/CAD_PG_CREDITO_001" para "Documentos/CAD_PG_CREDITO_B"
mv "Documentos/CAD_PG_CREDITO_002" para "Documentos/CAD_PG_CREDITO_C"
mv "Documentos/CAD_PG_CREDITO_003" para "Documentos/CAD_PG_CREDITO_D"
mv "Documentos/CAD_PG_CREDITO_004" para "Documentos/CAD_PG_CREDITO_E"
mv "Documentos/CAD_PG_CREDITO_005" para "Documentos/CAD_PG_CREDITO_F"
mv "Documentos/CAD_PG_CREDITO_006" para "Documentos/CAD_PG_CREDITO_G"
mv "Documentos/CAD_PG_CREDITO_007" para "Documentos/CAD_PG_CREDITO_H"
mv "Documentos/CAD_PG_CREDITO_008" para "Documentos/CAD_PG_CREDITO_I"
mv "Documentos/CAD_PG_CREDITO_009" para "Documentos/CAD_PG_CREDITO_J"
mv "Documentos/CAD_PG_CREDITO_010" para "Documentos/CAD_PG_CREDITO_K"
mv "Documentos/CAD_PG_CREDITO_011" para "Documentos/CAD_PG_CREDITO_L"
mv "Documentos/CAD_PG_CREDITO_012" para "Documentos/CAD_PG_CREDITO_M"
mv "Documentos/CAD_PG_CREDITO_013" para "Documentos/CAD_PG_CREDITO_N"
mv "Documentos/CAD_PG_CREDITO_014" para "Documentos/CAD_PG_CREDITO_O"
mv "Documentos/CAD_PG_CREDITO_015" para "Documentos/CAD_PG_CREDITO_P"
mv "Documentos/CAD_PG_CREDITO_016" para "Documentos/CAD_PG_CREDITO_Q"
mv "Documentos/CAD_PG_CREDITO_017" para "Documentos/CAD_PG_CREDITO_R"
mv "Documentos/CAD_PG_CREDITO_018" para "Documentos/CAD_PG_CREDITO_S"
mv "Documentos/CAD_PG_CREDITO_019" para "Documentos/CAD_PG_CREDITO_T"
mv "Documentos/CAD_PG_CREDITO_020" para "Documentos/CAD_PG_CREDITO_U"
mv "Documentos/CAD_PG_CREDITO_021" para "Documentos/CAD_PG_CREDITO_V"
mv "Documentos/CAD_PG_CREDITO_022" para "Documentos/CAD_PG_CREDITO_W"
mv "Documentos/CAD_PG_CREDITO_023" para "Documentos/CAD_PG_CREDITO_X"
mv "Documentos/CAD_PG_CREDITO_024" para "Documentos/CAD_PG_CREDITO_Y"
mv "Documentos/CAD_PG_CREDITO_025" para "Documentos/CAD_PG_CREDITO_Z"
Obs.: Note que o limite são 26 arquivos, de A a Z
Nota: É utilizado a "Expansão de variáveis" do bash....

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________



3. Re: Atribuir Sequencial com letras ao invés de números [RESOLVIDO]

Guilherme Andrade
gjudice

(usa Solaris)

Enviado em 10/08/2021 - 17:50h


Marcelo, boa tarde!

Primeiramente, agradeço por ceder parte seu tempo para ajudar :)

Segundamente...

Eu não entendi bem o começo da atribuição das letras teria como comentar as partes? Demorei uns dias para responder pq realmente tentei entender, mas não consegui :(

Obrigado pelo help

Absss


4. Re: Atribuir Sequencial com letras ao invés de números

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 10/08/2021 - 20:28h

gjudice escreveu:


Marcelo, boa tarde!

Primeiramente, agradeço por ceder parte seu tempo para ajudar :)

Segundamente...

Eu não entendi bem o começo da atribuição das letras teria como comentar as partes?
Demorei uns dias para responder pq realmente tentei entender, mas não consegui :(
Obrigado pelo help
Absss

Vamos lá....
----------------------------------------------------------------------------------------------------------------
#Gera a var ltr, com as letras de A a Z
ltr=$(printf "%s" {A..Z})

N=0; => :)
for arq in Documentos/*;do
echo "mv \"$arq\" para \"${arq//[0-9]}${letras:$N:1}\"";
done
---------------------------------------------------------------------------------------------------------------
# Isso é Expansão de variáveis
# ${arq//[0-9]} => Elimina os números da var arq
# ${letras:$N:1} => Pega um caractere da var ltr, seguindo a sequência da var N.
---------------------------------------------------------------------------------------------------------------
Veja o comando abaixo:
for n in {0..25};do echo "$n => ${ltr:$n:1}";done 

let N++; #Incrementa em 1 o valor da variável N , para cada "arq"
----------------------------------------------------------------------------------------------------------------
Resumindo: Substitui os Números por letra....
Obs:
Caso tenha mais de 26 arquivos,
É assunto para outro tópico.... :)
Quando RESOLVIDO, não esqueça de marcar o tópico como resolvido e....
Escolher a MELHOR RESPOSTA......
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:
---------------------------------------------------------------------------------------------------------------
Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.

______________________________________________________________________



5. Re: Atribuir Sequencial com letras ao invés de números [RESOLVIDO]

Guilherme Andrade
gjudice

(usa Solaris)

Enviado em 12/08/2021 - 22:13h


msoliver escreveu:

gjudice escreveu:


Marcelo, boa tarde!

Primeiramente, agradeço por ceder parte seu tempo para ajudar :)

Segundamente...

Eu não entendi bem o começo da atribuição das letras teria como comentar as partes?
Demorei uns dias para responder pq realmente tentei entender, mas não consegui :(
Obrigado pelo help
Absss

Vamos lá....
----------------------------------------------------------------------------------------------------------------
#Gera a var ltr, com as letras de A a Z
ltr=$(printf "%s" {A..Z})

N=0; => :)
for arq in Documentos/*;do
echo "mv \"$arq\" para \"${arq//[0-9]}${letras:$N:1}\"";
done
---------------------------------------------------------------------------------------------------------------
# Isso é Expansão de variáveis
# ${arq//[0-9]} => Elimina os números da var arq
# ${letras:$N:1} => Pega um caractere da var ltr, seguindo a sequência da var N.
---------------------------------------------------------------------------------------------------------------
Veja o comando abaixo:
for n in {0..25};do echo "$n => ${ltr:$n:1}";done 

let N++; #Incrementa em 1 o valor da variável N , para cada "arq"
----------------------------------------------------------------------------------------------------------------
Resumindo: Substitui os Números por letra....
Obs:
Caso tenha mais de 26 arquivos,
É assunto para outro tópico.... :)
Quando RESOLVIDO, não esqueça de marcar o tópico como resolvido e....
Escolher a MELHOR RESPOSTA......
______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:
---------------------------------------------------------------------------------------------------------------
Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.

______________________________________________________________________


Marcelo,

Muito Obrigado pelas explicações, vou fazer uns testes por aqui :)

Absss


6. Re: Atribuir Sequencial com letras ao invés de números [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 13/08/2021 - 00:49h


gjudice escreveu:
Marcelo,

Muito Obrigado pelas explicações, vou fazer uns testes por aqui :)

Absss

Ok gjudice,
Só faltou marcar a MELHOR RESPOSTA. . . . :)


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts