Salvando arquivo de texto em variavel no Array [RESOLVIDO]

1. Salvando arquivo de texto em variavel no Array [RESOLVIDO]

carlos alberto benatti
cablack87

(usa CentOS)

Enviado em 03/02/2015 - 17:21h

Prezados,

Alguem pode me ajudar com a seguinte situação:

Tenho um arquivo de 200 linhas (pode E provavel que tenha mais linhas)

preciso dividir ele em no maximo 50 linhas cada arquivo (no caso, estou tentando com o split)

Problemas:
Preciso colocar o arquivo inteiro (200 ou mais linhas) em um array de 50 linhas cada.

Por exemplo:

split -l 50 arquivo.txt (se o arquivo tiver 200 linhas, vai gerar 4 arquivos = xaa xab xac xad)

array=("linha1linha2linha3linha4linha5...linha50" "linha51linha52linha53linha54...linha100" )

Alguem tem alguma ideia de como fazer isso?

split -l 50 arquivo.txt

cat xaa > variavel
cat xab > variavel2
cat xac > variavel3
cat xad > variavel4

array=("variavel" "variavel2" "variavel3" "variavel3")

só que não pode ser variavel, preciso do valor do arquivo, como se estivesse dando um echo na variavel e salvando no array

array=( "linha1linha2linha3linha4linha5...linha50" "linha51linha52linha53linha54...linha100" )

agradeço muito antecipadamente,


  


2. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 03/02/2015 - 18:16h

cablack87 escreveu:

Prezados,

Alguem pode me ajudar com a seguinte situação:

Tenho um arquivo de 200 linhas (pode E provavel que tenha mais linhas)

preciso dividir ele em no maximo 50 linhas cada arquivo (no caso, estou tentando com o split)

Problemas:
Preciso colocar o arquivo inteiro (200 ou mais linhas) em um array de 50 linhas cada.

Por exemplo:

split -l 50 arquivo.txt (se o arquivo tiver 200 linhas, vai gerar 4 arquivos = xaa xab xac xad)

array=("linha1linha2linha3linha4linha5...linha50" "linha51linha52linha53linha54...linha100" )

Alguem tem alguma ideia de como fazer isso?

split -l 50 arquivo.txt

cat xaa > variavel
cat xab > variavel2
cat xac > variavel3
cat xad > variavel4

array=("variavel" "variavel2" "variavel3" "variavel3")

só que não pode ser variavel, preciso do valor do arquivo, como se estivesse dando um echo na variavel e salvando no array

array=( "linha1linha2linha3linha4linha5...linha50" "linha51linha52linha53linha54...linha100" )

agradeço muito antecipadamente,


Pode ter sido falta de atenção minha mas não consegui entender muito bem o que pretende fazer porque pareceu que precisa subdividir um arquivo em grupos de cinquenta linhas e depois reagrupar tudo num único array novamente. Dúvida: porque precisa dividir em grupos de cinquenta linhas?

Carregar arquivos em arrays é algo simples tanto utilizando apenas 'while' quanto com o 'mapfile'. Depende mais de como você pretende trabalhar com esses dados.




3. Re: Salvando arquivo de texto em variavel no Array

carlos alberto benatti
cablack87

(usa CentOS)

Enviado em 03/02/2015 - 18:29h

Ola, é mais ou menos isso, preciso dividir um arquivo em "lotes" de 50 linhas para poder trabalhar com elas via while no array.

(Como a descrição do grupo cita: "Precisa editar 10 milhões de linhas com 1 só comando e não sabe como ? ")

Preciso dividir o arquivo em lotes de 50, retirar a quebra de linha e ainda por cima... colocar no array para usar no while, rsrsrs


4. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 07/02/2015 - 10:44h

Segue o script que adiciona as 200 linhas dos 4 arquivos criados em um array e mostra cada índice do array a medida que vão sendo adicionados:

-- CRIAÇÃO DO ARQUIVO DE 200 LINHAS --

for i in `seq 1 200`; do echo "Esta é a linha $i" >> arquivo_principal.txt ; done

-- DIVISÃO --

[root@lispbx:~/VIVAOLINUX]# split -l 50 arquivo_principal.txt

[root@lispbx:~/VIVAOLINUX]# ls -l
total 28
-rw-r--r-- 1 root root 4092 Fev 2 13:06 arquivo_principal.txt
-rwxr-xr-x 1 root root 429 Fev 2 13:57 script.sh
-rw-r--r-- 1 root root 991 Fev 2 13:06 xaa
-rw-r--r-- 1 root root 1001 Fev 2 13:06 xab
-rw-r--r-- 1 root root 1050 Fev 2 13:06 xac
-rw-r--r-- 1 root root 1050 Fev 2 13:06 xad


-- SCRIPT --

[root@lispbx:~/VIVAOLINUX]# cat script.sh
#!/bin/bash
#ZERA AS VARIÁVEIS ANTES DE EXECUTAR
unset i
unset array
i=1
while [ "$i" -lt 201 ]; do
for palavra in "`cat x??`"; do
STRING=`echo "$palavra" | head -n "$i" | tail -n +"$i" | head -n +"$i"`; #Seleciona apenas a linha de número $i
arg=$(( $i - 1 ));
array[$arg]=$STRING; # Adiciona cada linha no array
echo ${array["$arg"]}; #Mostra o valor do índice $i do array
((i=$i+1));
done;
done

-- EXECUÇÃO --

[root@lispbx:~/VIVAOLINUX]# ./script.sh
Esta é a linha 1.
Esta é a linha 2.
Esta é a linha 3.
Esta é a linha 4.
^C

Verifique se é isto mesmo que você procura.



5. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 07/02/2015 - 11:56h

Esta discussão também está rolando na lista shell-script do yahoo groups:

https://br.groups.yahoo.com/neo/groups/shell-script/conversations/topics/38392;_ylc=X3oDMTM2bjNhcmlr...


6. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

Benedito
bmarquesm

(usa Fedora)

Enviado em 08/02/2015 - 18:15h

Eu vi aqui textmode, obrigado. cablack87, qualquer coisa, caso já tenha sido resolvido, não esquece de marcar o tópico como resolvido, vlw!


7. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

carlos alberto benatti
cablack87

(usa CentOS)

Enviado em 09/02/2015 - 10:02h

Muito obrigado pela atençao bmarquesm, mas o meu problema continua, mesmo com a ajuda o Julio do outro forum, ainda não consegui resolver o problema.

No caso, acredito que o script está funcionando muito bem, o problema é comigo que não sei chamar a variável, rsrsrs

Por exemplo, criei um arquivo com alguns nomes de carros (arquivo_teste.txt) e rodei o script abaixo:

#!/bin/bash
split -l 10 arquivo_teste.txt
Ind=-1
for Arq in xa*
do
Arr[++Ind]=\"$(tr -d '\n' < $Arq)\"
echo $Arr
sleep 1
echo -----
done

Se rodar em Debug, tenho essa saida:
bash -x ./script_teste.sh
+ split -l 10 arquivo_teste.txt
+ Ind=-1
+ for Arq in 'xa*'
++ tr -d '\n'
+ Arr[++Ind]='"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"'
+ echo '"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"'
"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"
+ sleep 1
+ echo -----
-----
+ for Arq in 'xa*'
++ tr -d '\n'
+ Arr[++Ind]='"Chevette-Chevy-Classic-Cobalt-Corsa-Cruze-D10-D20-Ipanema-Kadett-"'
+ echo '"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"'
"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"
+ sleep 1
+ echo -----
-----
+ for Arq in 'xa*'
++ tr -d '\n'
+ Arr[++Ind]='"Marajó-Meriva-Montana-Monza-Omega-Omega-Onix-Opala-Prisma-Spin-"'
+ echo '"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"'
"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"
+ sleep 1
+ echo -----
-----
+ for Arq in 'xa*'
++ tr -d '\n'
+ Arr[++Ind]='"S10-Trailblazer-Vectra-Vectra-Veraneio-Zafira-"'
+ echo '"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"'
"A10-A20-Astra-Blazer-Bonanza-Brasil-C10-C20-Caravan-Celta-"
+ sleep 1
+ echo -----
-----
+ echo fim
fim

No caso, repare que no "echo" sempre retorno o valor da primeira variável (xaa), mas o Array altera os nomes dos carros.
Alguém pode me ajudar a chamar o valor do Array corretamente? Se alterar para "Arr[++Ind]" a resposta é a mesma.



8. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 09/02/2015 - 10:18h

A solução em

https://br.groups.yahoo.com/neo/groups/shell-script/conversations/messages/38402

não lhe serviu?


9. Re: Salvando arquivo de texto em variavel no Array [RESOLVIDO]

carlos alberto benatti
cablack87

(usa CentOS)

Enviado em 09/02/2015 - 11:47h

Muito obrigado textmode / bmarquesm

Por algum motivo de força maior, não recebi essa mensagem e de posse dela, ficou assim:

echo ${Arr[Ind++]}

Não sei se esta 100% certo... mas esta 100% funcional, rsrs

Novamente, muito obrigado a todos.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts