The UNIX and Linux Forums  

Go Back   O UNIX e Linux Forum > Top Fóruns > Programação Shell Script e
.
google unix.com



Programação Shell Script e Post perguntas sobre ksh, CSH, SH, BASH, Perl, PHP, SED, Awk e outros scripts shell e shell scripts línguas aqui.

Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
Dividir arquivo grande e adicionar cabeçalho e rodapé em cada arquivo ashish4422 Programação Shell Script e 1 04-15-2008 07:12
Dividir um arquivo com nenhum padrão - Split, Csplit, Awk madhunk UNIX para Dummies Perguntas & Respostas 10 12-17-2007 12:57
dividir o nome do arquivo rayashot Programação Shell Script e 1 05-28-2007 02:47
Necessidade de dividir o arquivo getdpg Programação Shell Script e 11 09-04-2006 04:08
Como dividir arquivo de tags dentro arquivo? spookyrtd99 Programação Shell Script e 1 07-31-2006 01:50

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
Linkback Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 07-20-2004
pvar pvar is offline
Usuário
  
 

Join Date: Feb 2004
Localização: MI, E.U.A.
Lugares: 12
Dividir arquivo usando awk

Estou tentando ler um arquivo e dividir o arquivo em vários arquivos. Preciso de criar novos ficheiros com diferentes conjunto de linhas do arquivo original. ou seja, o primeiro arquivo de saída pode conter 10 linhas e 100 linhas, o segundo e assim por diante. Os critérios para se obter as linhas entre duas linhas começando com alguns caracteres (variável)

por exemplo. Um exemplo de arquivo de entrada

DOC100
aaaaaa
bbbbbb
cccccccc
FIM
DOC200
ddddddd
eeeeeee
FIM

Preciso enviar as linhas entre DOC100 e END para out.1
e as linhas entre DOC200 e END para o próximo out.2

Eu pensei que eu poderia fazer isto usando awk e eu tentei o seguinte comando, mas não funcionou.

k \u003d grep $ filename DOC | cut-c4-6
awk-v cn \u003d $ k '/ DOC $ cn /, / FIM / (print $ 0)' $ filename> $ OUTFILE

Alguém pode me ajudar nisto? Obrigado
  #2 (permalink)  
Old 07-20-2004
zazzybob's Avatar
zazzybob zazzybob is offline Forum Advisor  
Registrado Geek
  
 

Join Data: dezembro 2003
Localização: Melbourne, Austrália
Posts: 2.100
Um script como este será o nome arquivos out.100, out.200 onde o número corresponde a tudo o que segue "DOC"

Código:
#!/bin/sh

while read line
do
   if echo $line | grep DOC; then
       line_no=`echo $line | sed 's/DOC\([0-9]*\)/\1/g'`
   elif echo $line | grep END; then
       : #ignore
   else
       echo $line >> out.$line_no
   fi
done < file.txt
Quando ficheiro.txt contém os dados.

Este é um script rápido e não há espaço para melhorias, mas você pegou a idéia.

Felicidades
ZB
  #3 (permalink)  
Old 07-21-2004
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Moderador
  
 

Join Date: Oct 2003
Localização: -31.96,115.84
Mensagens: 1.409
Usando o awk ..
Código:
awk '/^DOC/{f=$1} f{print > f} /^END/{close f}' infile
  #4 (permalink)  
Old 07-21-2004
pvar pvar is offline
Usuário
  
 

Join Date: Feb 2004
Localização: MI, E.U.A.
Lugares: 12
Graças zazzybob e Ygor para a sua ajuda. Mas não vejo problema algum com cada um dos seus scripts.

zazzybob do script - Primeiro de tudo eu tenho um tamanho fixo arquivo de dados que eu preciso para dividir. O script cria arquivos separados com os dados, mas ele ignora destinados a espaços no campo, significa que concatena os campos deixando de fora os espaços dentro deles.

Ygor do script - Seu script cria um arquivo chamado DOC apenas com os dados entre a última DOC / FIM. Mas ela coloca os dados como o que está no arquivo de entrada, que é um bom sinal.
  #5 (permalink)  
Old 07-21-2004
zazzybob's Avatar
zazzybob zazzybob is offline Forum Advisor  
Registrado Geek
  
 

Join Data: dezembro 2003
Localização: Melbourne, Austrália
Posts: 2.100
Para resolver o problema com o script que postou, basta colocar aspas em torno de "$ linha", thusly
Código:
echo "$line" >> out.$line_no
Isso vai manter o espaço

Felicidades
ZB
  #6 (permalink)  
Old 07-21-2004
Ygor's Avatar
Ygor Ygor is offline Forum Staff  
Moderador
  
 

Join Date: Oct 2003
Localização: -31.96,115.84
Mensagens: 1.409
Eu não lido pouco sobre o arquivo como "doc.1" antes. Experimente esta vez ...
Código:
awk '/^DOC/{f="doc."++d} f{print > f} /^END/{close f; f=""}' infile
$ Cabeça -1000000 doc .*
\u003d\u003d> Doc.1 <\u003d\u003d
DOC100
aaaaaa
bbbbbb
cccccccc
FIM

\u003d\u003d> Doc.2 <\u003d\u003d
DOC200
ddddddd
eeeeeee
FIM
  #7 (permalink)  
Old 07-21-2004
pvar pvar is offline
Usuário
  
 

Join Date: Feb 2004
Localização: MI, E.U.A.
Lugares: 12
zazzybob o script funciona bem agora.

Ygor's script ainda tem um problema. Cria arquivos de saída separado, mas agora ela coloca linhas começando com DOC & FIM também nos arquivos de saída. Eu só preciso dos dados entre as linhas.

Agin Obrigado pela ajuda.
Closed Thread

Marcadores

Thread Tools Pesquisar este Thread
Pesquisar este Thread:

Pesquisa Avançada
Display Modes Esta taxa Thread
Esta taxa Thread:

Destacamento Regimento
Você não pode postar novas threads
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar suas postagens

BB code é Ligado
Smilies são Ligado
[IMG] código é Ligado
Código HTML é Desligado
Trackbacks são Ligado
Pingbacks são Ligado
Refbacks são Ligado




Todos os horários são GMT -4. A hora é agora 09:45.


Powered by: vBulletinCopyright © 2000 - 2006, Jelsoft Enterprises Limited. Língua Traduções Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
O UNIX e Linux Fóruns Content Copyright © 1993-2009. Todos os Direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0