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