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



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.

Reply
English Japanese Spanish French German Portuguese Italian Powered by Powered by Google
 
Thread Tools Pesquisar este Thread Rate Thread Display Modes
  #1 (permalink)  
Old 10-07-2009
Usuário
 

Data de Entrada: Sep 2009
Lugares: 180
Extrair um conteúdo específico de um arquivo

Meu arquivo de entrada:

Código:
>sequence_1
ASSSSSSSSSSSDDDDDDDDDDDCCCCCCC
ASDSFDFFDFDFFWERERERERFSDFESFSFD
>sequence_2
ASDFDFDFFDDFFDFDSFDSFDFSDFSDFDSFASDSADSADASD
ASDFFDFDFASFASFASFAFSFFSDASFASFASFAFS
>sequence_3
VEDFGSDGSDGSDGSDGSDGSDGSDG
dDFSDFSDFSDFSDFSDFSDFSDFSDF
SDGFDGSFDGSGSDGSDGSDGSDGSDG

Meu arquivo de saída desejado:

Código:
>sequence_2
ASDFDFDFFDDFFDFDSFDSFDFSDFSDFDSFASDSADSADASD
ASDFFDFDFASFASFASFAFSFFSDASFASFASFAFS

Eu só quero extrair o cabeçalho do sequence_2 e seu conteúdo.
Alguém ainda tem idéia de como fazer isso?
Awk resposta será mais rápida se tem uma longa lista de conteúdo?
Obrigado por todas as suas sugestões

Última edição por Radoulov; em 10-07-2009 07:55.. Motivo: Utilize tags de código, por favor!
Links Patrocinados
  #2 (permalink)  
Old 10-07-2009
thegeek thegeek is offline Forum Advisor  
Registrado
 

Join Date: Apr 2009
Local: / usr / bin / vim
Lugares: 657

Código:
sed -n -e '/>sequence_3/q' -e '/>sequence_2/,/>sequence_3/p' t1

Coloque sua entrada e saída de etiquetas de código para uma melhor visibilidade.
  #3 (permalink)  
Old 10-07-2009
radoulov's Avatar
--
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 3.220
Usar basbaque, nawk ou /usr/xpg4/bin/awk ligado Solaris:


Código:
awk 'END { if (r ~ p) print r }
/^>sequence/ { if (r ~ p) print r; r = x }
{ r = (r ? r RS : x) $0 }
' p="sequence_2" infile



---------- Post atualizado no 12:47 PM ---------- atualização anterior foi no 12:41 PM ----------

Sim,
thegeek's sed abordagem deve ser mais rápido.
Supondo que os números de seqüência progressiva com formato fixo,
você pode adicionar parâmetros:


Código:
start="sequence_2"
stop="$(( ${start##*_} + 1 ))"

sed -n "
  /$stop/q
  /$start/,/$stop/p
  " infile



---------- Post atualizado às 12:51 ---------- atualização anterior foi no 12:47 PM ----------

Uma abordagem semelhante com awk:

Código:
awk '$0 ~ stop { exit }
  $0 ~ start, $0 ~ stop {
    if ($0 !~ stop) print 
    }' start="sequence_2" \
stop="$(( ${start##*_} + 1 ))" infile



---------- Post atualizado às 12:54 ---------- atualização anterior foi às 12:51 ----------

Observe que o sed eo segundo awk Versões assumir uma entrada em numérico (número de seqüência) condenar apenas como o exemplo no post original.
  #4 (permalink)  
Old 10-07-2009
danmero danmero is offline Forum Advisor  
 

Join Date: Nov 2007
Localização: H3X
Posts: 1.566

Código:
awk '/_3$/{exit}/_2$/{f=1}f' file

  #5 (permalink)  
Old 10-07-2009
Usuário
 

Join Date: Aug 2009
Posts: 7
Grep sabor, se o direito

Se o seu suporte grep-A (- after-context) você pode tentar o seguinte:

Código:
grep -A 2 "sequnce_2" infile

Minha distro Ubuntu tem, mas eu sei que eu tinha de agarrá-lo para minhas caixas de Solaris.
  #6 (permalink)  
Old 10-07-2009
radoulov's Avatar
--
 

Join Date: Jan 2007
Localização: Варна, България / Milano, Italia
Mensagens: 3.220
Citação:
Originally Posted by danmero View Post
Código:
awk '/_3$/{exit}/_2$/{f=1}f' file

Bem,
soluções para um tiro poderia ser ainda:


Código:
awk '/_3$/{exit}/_2$/,0' infile

Ou:


Código:
awk '/_3$/{exit}/_2$/,_' infile


Última edição por Radoulov; em 10-07-2009 09:25..
Bits Awarded / Cobrado para radoulov para este Post
Data Usuário Comentário Valor
10-07-2009 danmero awk '/ _3 $ / (exit) / _2 $ /, 0' infile 666
  #7 (permalink)  
Old 10-07-2009
Usuário
 

Data de Entrada: Sep 2009
Lugares: 180
Oi thegeek,
Obrigado por sua sugestão. É trabalhado agradável.
Você pode explicar mais ou menos sobre o motivo que você escreve o código?!

Código:
sed -n -e '/>sequence_3/q' -e '/>sequence_2/,/>sequence_3/p' t1

Por exemplo, se eu tenho longa lista de conteúdos e eu só quero extrair o conteúdo específico com base no cabeçalho interessados, posso usar o sed código que você recomendaria também?

Citação:
Originally Posted by thegeek View Post
Código:
sed -n -e '/>sequence_3/q' -e '/>sequence_2/,/>sequence_3/p' t1

Coloque sua entrada e saída de etiquetas de código para uma melhor visibilidade.
Links Patrocinados
Reply

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 Desligado


Mais UNIX e Linux Fórum Tópicos Você pode achar Helpfull
Fio Thread Starter Fórum Respostas Última postagem
para extrair o valor específico em um arquivo techmoris Programação Shell Script e 3 08-14-2009 06:46
Remover conteúdo específico em um arquivo k9cheung Programação Shell Script e 1 08-10-2009 04:37
para encontrar conteúdo específico no arquivo do diretório e listar apenas nomes madhu_Jagarapu AIX 2 12-23-2008 02:13
Recuperar o conteúdo entre linhas específicas ina arquivo chennaitomcruis Programação Shell Script e 4 04-19-2008 11:18
Conteúdo extrato de um arquivo usando awk nr_shan Programação Shell Script e 5 12-19-2007 05:22



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


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 Brasil Content Copyright © 1993-2010. Todos os direitos Reserved.Ad Gestão por RedTyger

Content Relevant URLs por vBSEO 3.2.0