iniciante - scrip shell copia do cabeçalho

1. iniciante - scrip shell copia do cabeçalho

Danubia Miranda
mfatima1234

(usa Outra)

Enviado em 14/04/2016 - 14:20h

olá,

gente preciso de uma ajuda de vcs...utilizei um split -lines para quebra de arquivo em linhas, porém agora preciso manter e replicar a primeira linha do arquivo inicial para os demais arquivos que resultaram da quebra do split...além disso cada arquivo criado precisa ser renomeado, alguém pode me ajudar...


  


2. Re: iniciante - scrip shell copia do cabeçalho

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/04/2016 - 16:07h

mfatima1234 escreveu:
olá,
gente preciso de uma ajuda de vcs...
utilizei um split -lines para quebra de arquivo em linhas, porém agora preciso manter e replicar a primeira linha do arquivo inicial para os demais arquivos que resultaram da quebra do split...
além disso cada arquivo criado precisa ser renomeado, alguém pode me ajudar...


Boa tarde mfatima.
Se utilizar o script que montei, o problema dos nomes estará resolvido.
Para pegar o conteúdo da 1ª linha, faça:
sed -n 1p arquivo_inicial 


Essa parte não entendi:
replicar a primeira linha do arquivo inicial para os demais arquivos
Na primeira linha?

Att.:
Marcelo




3. Re: iniciante - scrip shell copia do cabeçalho

Danubia Miranda
mfatima1234

(usa Outra)

Enviado em 14/04/2016 - 16:11h

msoliver escreveu:

mfatima1234 escreveu:
olá,
gente preciso de uma ajuda de vcs...
utilizei um split -lines para quebra de arquivo em linhas, porém agora preciso manter e replicar a primeira linha do arquivo inicial para os demais arquivos que resultaram da quebra do split...
além disso cada arquivo criado precisa ser renomeado, alguém pode me ajudar...


Boa tarde mfatima.
Se utilizar o script que montei, o problema dos nomes estará resolvido.
Para pegar o conteúdo da 1ª linha, faça:
sed -n 1p arquivo_inicial 


Essa parte não entendi:
replicar a primeira linha do arquivo inicial para os demais arquivos
Na primeira linha?
Ultima linha?


Att.:
Marcelo



Oi,

Dei um split para quebrar um arquivo inicial por linhas, nesse arquivo inicial há um cabeçalho, este cabeçalho deve aparecer nos demais aquivos que resultaram da quebra de linhas

ex: arquivo com 1000 linhas quebrei em dois arquivos com 500 linhas, o cabeçalho do arquivo com 1000 linhas deve aparecer para os dois arquivos de 500...

...esse foi o Script q fiz para teste do split com quebra de linhas, deu certo, agora preciso colocar o cabeçalho do arquivo que foi quebrado para cada saída ...não sei como fazer

#!/bin/bash
arquivo_origem=".../Output/arquivo.txt"
arquivo_destino="../Destino/"

split --lines=1 Sarquivo_origem $arquivo_destino


4. Re: iniciante - scrip shell copia do cabeçalho

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/04/2016 - 18:38h

mfatima1234 escreveu:

msoliver escreveu:

mfatima1234 escreveu:
olá,
gente preciso de uma ajuda de vcs...
utilizei um split -lines para quebra de arquivo em linhas, porém agora preciso manter e replicar a primeira linha do arquivo inicial para os demais arquivos que resultaram da quebra do split...
além disso cada arquivo criado precisa ser renomeado, alguém pode me ajudar...


Boa tarde mfatima.
Se utilizar o script que montei, o problema dos nomes estará resolvido.
Para pegar o conteúdo da 1ª linha, faça:
sed -n 1p arquivo_inicial 


Essa parte não entendi:
replicar a primeira linha do arquivo inicial para os demais arquivos
Na primeira linha?
Ultima linha?


Att.:
Marcelo



Oi,

Dei um split para quebrar um arquivo inicial por linhas, nesse arquivo inicial há um cabeçalho, este cabeçalho deve aparecer nos demais aquivos que resultaram da quebra de linhas

ex: arquivo com 1000 linhas quebrei em dois arquivos com 500 linhas, o cabeçalho do arquivo com 1000 linhas deve aparecer para os dois arquivos de 500...

...esse foi o Script q fiz para teste do split com quebra de linhas, deu certo, agora preciso colocar o cabeçalho do arquivo que foi quebrado para cada saída ...não sei como fazer

#!/bin/bash
arquivo_origem=".../Output/arquivo.txt"
arquivo_destino="../Destino/"

split --lines=1 Sarquivo_origem $arquivo_destino


MFatima, boa tarde.
Com base no seu exemplo:
ex: arquivo com 1000 linhas quebrei em dois arquivos com 500 linhas, o cabeçalho do arquivo com 1000 linhas deve aparecer para os dois arquivos de 500...

Partindo do princípio que o cabeçalho é a linha 1 do arquivo original (1000000 linhas), e na divisão essa linha já foi incluída no primeiro arquivo (01_a_500_linhas.txt), o CABEÇALHO, deve ser inserido a partir do segundo ARQUIVO, certo?
Se for isso mesmo, o SCRIPT ABAIXO, faz a divisão dos arquivos, insere o CABEÇALHO (QUE É A 1ª LINHA DO ARQUIVO 1000k_LINHAS ) e define o nome dos arquivos como, "LINHAINICIAL"_"LINHAFINAL".txt (SOMENTE o NUMERO).
SCRIPT:

#COMEÇA NA LINHA ABAIXO#
#!/bin/bash
#SUBSTITUA 1KK_LINHAS.txt, PELO NOME DO SEU ARQUIVO COM "1000000" de linhas
ARQ_ORIG="1KK_LINHAS.txt"
CABECALHO=$(sed -n 1p $ARQ_ORIG)

for i in {0..999500..500};do
#PARA TESTAR, DESCOMENTE A LINHA ABAIXO E COMENTE"#" A LINHA ACIMA. GERA 02 ARQUIVOS.
#for i in {0..500..500};do
NI=$((i+1))
NF=$((i+500))
#DEFINE NOME DO ARQUIVO FINAL COMO, "linhainicial"_"linhafinal".txt
ARQFINAL=""$NI"_"$NF".txt"
#INCLUI O CABEÇALHO E "PULA UMA LINHA, A PARTIR DO SEGUNDO ARQUIVO GERADO
(($i>0)) && echo -e "$CABECALHO\n" >> $ARQFINAL
sed -n ""$NI","$NF"p" $ARQ_ORIG >> $ARQFINAL
echo -e "GERADO ARQUIVO: "$ARQFINAL"\n"
done
#TERMINA NA LINHA ACIMA#

OBS.:
Copie o SCRIPT acima, cole no seu editor de textos, salve e, não esqueça . . .
De permissão de execução:
chmod +x NOMEDOSCRIPT 


----------------------------------------------------------------------------------------
Se a resposta resolveu sua dúvida, marque-a como a MELHOR, dessa forma, ganho uns pontos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo




5. Re: iniciante - scrip shell copia do cabeçalho

Danubia Miranda
mfatima1234

(usa Outra)

Enviado em 15/04/2016 - 10:47h

msoliver escreveu:

mfatima1234 escreveu:

msoliver escreveu:

mfatima1234 escreveu:
olá,
gente preciso de uma ajuda de vcs...
utilizei um split -lines para quebra de arquivo em linhas, porém agora preciso manter e replicar a primeira linha do arquivo inicial para os demais arquivos que resultaram da quebra do split...
além disso cada arquivo criado precisa ser renomeado, alguém pode me ajudar...


Boa tarde mfatima.
Se utilizar o script que montei, o problema dos nomes estará resolvido.
Para pegar o conteúdo da 1ª linha, faça:
sed -n 1p arquivo_inicial 


Essa parte não entendi:
replicar a primeira linha do arquivo inicial para os demais arquivos
Na primeira linha?
Ultima linha?


Att.:
Marcelo



Oi,

Dei um split para quebrar um arquivo inicial por linhas, nesse arquivo inicial há um cabeçalho, este cabeçalho deve aparecer nos demais aquivos que resultaram da quebra de linhas

ex: arquivo com 1000 linhas quebrei em dois arquivos com 500 linhas, o cabeçalho do arquivo com 1000 linhas deve aparecer para os dois arquivos de 500...

...esse foi o Script q fiz para teste do split com quebra de linhas, deu certo, agora preciso colocar o cabeçalho do arquivo que foi quebrado para cada saída ...não sei como fazer

#!/bin/bash
arquivo_origem=".../Output/arquivo.txt"
arquivo_destino="../Destino/"

split --lines=1 Sarquivo_origem $arquivo_destino


MFatima, boa tarde.
Com base no seu exemplo:
ex: arquivo com 1000 linhas quebrei em dois arquivos com 500 linhas, o cabeçalho do arquivo com 1000 linhas deve aparecer para os dois arquivos de 500...

Partindo do princípio que o cabeçalho é a linha 1 do arquivo original (1000000 linhas), e na divisão essa linha já foi incluída no primeiro arquivo (01_a_500_linhas.txt), o CABEÇALHO, deve ser inserido a partir do segundo ARQUIVO, certo?
Se for isso mesmo, o SCRIPT ABAIXO, faz a divisão dos arquivos, insere o CABEÇALHO (QUE É A 1ª LINHA DO ARQUIVO 1000k_LINHAS ) e define o nome dos arquivos como, "LINHAINICIAL"_"LINHAFINAL".txt (SOMENTE o NUMERO).
SCRIPT:

#COMEÇA NA LINHA ABAIXO#
#!/bin/bash
#SUBSTITUA 1KK_LINHAS.txt, PELO NOME DO SEU ARQUIVO COM "1000000" de linhas
ARQ_ORIG="1KK_LINHAS.txt"
CABECALHO=$(sed -n 1p $ARQ_ORIG)

for i in {0..999500..500};do
#PARA TESTAR, DESCOMENTE A LINHA ABAIXO E COMENTE"#" A LINHA ACIMA. GERA 02 ARQUIVOS.
#for i in {0..500..500};do
NI=$((i+1))
NF=$((i+500))
#DEFINE NOME DO ARQUIVO FINAL COMO, "linhainicial"_"linhafinal".txt
ARQFINAL=""$NI"_"$NF".txt"
#INCLUI O CABEÇALHO E "PULA UMA LINHA, A PARTIR DO SEGUNDO ARQUIVO GERADO
(($i>0)) && echo -e "$CABECALHO\n" >> $ARQFINAL
sed -n ""$NI","$NF"p" $ARQ_ORIG >> $ARQFINAL
echo -e "GERADO ARQUIVO: "$ARQFINAL"\n"
done
#TERMINA NA LINHA ACIMA#

OBS.:
Copie o SCRIPT acima, cole no seu editor de textos, salve e, não esqueça . . .
De permissão de execução:
chmod +x NOMEDOSCRIPT 


----------------------------------------------------------------------------------------
Se a resposta resolveu sua dúvida, marque-a como a MELHOR, dessa forma, ganho uns pontos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo



Oi como estou fazendo isso pela primeira vez tenho muita dificuldade, vc tem um jeito mais fácil, pra fazer?


6. Re: iniciante - scrip shell copia do cabeçalho

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/04/2016 - 12:53h

mfatima1234 escreveu:
Oi como estou fazendo isso pela primeira vez tenho muita dificuldade, vc tem um jeito mais fácil, pra fazer?


Bom dia M. Fatima.
Provavelmente, o excesso de comentários que eu coloquei, acabou te confundindo...

Segue o Script "mais limpo"

#!/bin/bash
ARQ_ORIG="ARQUIVO_ORIGINAL.txt"
CABECALHO=$(sed -n 1p $ARQ_ORIG)
for i in {0..999500..500};do
NI=$((i+1))
NF=$((i+500))
ARQFINAL=""$NI"_"$NF".txt"
echo -e "$CABECALHO\n" >> $ARQFINAL
sed -n ""$NI","$NF"p" $ARQ_ORIG >> $ARQFINAL
echo "GERADO ARQUIVO: "$ARQFINAL""
done

Melhorou?

Obs: Na VARIÁVEL "ARQ_ORIG", coloque o nome do seu arquivo com 1000000_de_linhas.
Serão gerados 2000 arquivos (1000000/500), contendo o CABEÇALHO e "500 linhas do ARQUIVO_ORIGINAL",
sendo:
1 a 500
501 a 1000
1001 a 1500 . . .
Ate a linha 1000.000

O NOME de cada um, será:
1_500.txt
501_1000.txt
1001_1500.txt
E assim sucessivamente . . .

Para cada arquivo GERADO, será mostrado na tela:
GERADO ARQUIVO: NOME DO ARQUIVO
É só rodar o script . . .
Se restou alguma duvida, é só perguntar.

E não esqueça . . .
----------------------------------------------------------------------------------------
Se a resposta resolveu sua dúvida, marque-a como a MELHOR, dessa forma, ganho uns pontos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts