![]() |
|
|
google unix.com
|
|||||||
| Fóruns | Registar | Fórum Regimento | Ligações | Álbuns | FAQ | Lista deputados | Calendário | Pesquisa | Today's Posts | Mark Forums Read |
| 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 |
| sed: encontrar correspondência e apagar a linha acima | cstovall | Programação Shell Script e | 3 | 07-02-2008 11:31 |
| Perl: Corresponder uma linha com vários padrões de pesquisa | Juha | Programação Shell Script e | 10 | 04-09-2008 02:43 |
| Múltiplas linha jogo usando sed | SiftinDotCom | Programação Shell Script e | 15 | 03-28-2008 02:12 |
| ler e combinar várias linhas em perl | zx1106 | Programação Shell Script e | 5 | 03-14-2008 10:21 |
| sed - substituição da linha que contém o padrão coincide com uma nova linha | kousikan | Programação Shell Script e | 2 | 03-24-2007 07:24 |
![]() |
|
|
Linkback | Thread Tools | Pesquisar este Thread | Rate Thread | Display Modes |
|
|
|
||||
|
Olá Peritos, Estou a newbie perl, Apenas curioso para saber como fazer o seguinte na perl. Suponho que tenho um arquivo txt como abaixo. quando se funda "* Principais Iniciar" Em seguida, vá para "* Fim principal ,,,,,,,," patteren e apenas coletar o número a partir da linha anterior do "* Fim principal ,,,,,,," padrão. No meu caso é 5. Então inicie excuting normalmente a partir da "* Principais Iniciar" posição Na sequência é a imagem .. Eu não quero criar nenhum arquivo temporário também .. Arquivo de entrada: Código:
*Init End *Main Start *Comment Reset Timers 000000,0000,0,0,0,0,0,1,0 000000,0000,0,0,0,0,1,1,0 *Comment Control Frame at 1.04596 ms 000000,0400,0,0,0,0,1,0,1 2418A4,0000,0,1,3,0,0,0,0 049C00,0000,0,0,2,0,0,0,0 *Comment Control Frame at 1.04673 ms *Comment Control Frame at 000002,0000,0,0,0,0,1,0,1 241002,0000,0,1,3,0,0,0,0 000100,0000,0,0,2,0,0,0,0 *Comment Control Frame at 000004,0000,0,0,0,0,1,0,1 241002,0000,0,1,3,0,0,0,0 000000,0000,0,0,2,0,0,0,0 *Comment Frame 13 at ** us,,,,,,,, 000005,7E3D,0,0,0,0,1,0,1 *Main End,,,,,,,, Saída: Código:
*Init End *Main Start repeat(5); process all lines as usual here. ............ *Main End,,,,,,,,, Eu tenho para imprimir todas as linhas, pois é quando ele encontrou uma linha começando com *. Thats por isso que estou fazendo como abaixo Código:
if(m/^\*/){
print "//", $_;
next;
}
Código:
Basic Algorithm of my programme need : 1. If "*Main Start" pattern found go to line where Pattern matches "*Main end". 2. Get the previous line. and get the value of the first field. 3. Return to "*Main start" position again. & Print repeat(that number) : in my case it is 5 : 4. stop/next; Qualquer ajuda appriciated mais .. atenciosamente, user_prady Última edição por user_prady; em 03-28-2008 12:51.. |
|
||||
|
Não é possível!
Citação:
Obrigado Última edição por user_prady; em 03/30/2008 11:07.. |
|
||||
|
Não dependem de mim, eu preciso voltar a ser o meu dia de emprego em breve. Há várias maneiras de fazer isso, obviamente. O antiquado variante seria para lembrar a linha anterior e imprimir o que quando você ver o terminador. A realidade brutal Perl abordagem seria a mastigar fazendo barulho todo o arquivo e substituir tudo com uma string vazia excepto a linha antes da terminação. Há um no Perl FAQ sobre isso; perlfaq6 e em torno de questões relacionadas com deslocamento. (A pergunta sobre a C observações mais baixo da página tem algumas sugestões, também.) Mas a "linha anterior" solução é absolutamente a mais simples, neste caso, se você não tem outras exigências. Código:
perl -ne 'BEGIN { $matching = 0; }
$matching = 1 if (m/^\*Main Start/);
next unless $matching;
print $prev if (defined $prev && m/^\*Main End/);
$prev = $_'
Não tem certeza sobre o controlo de fluxo tentou descrever. Tem de se lembrar de tudo, desde suposto principal começar até final principais e imprimir que após a saída da última linha principal antes de terminar? (Acho que este já pode ser considerada uma pseudo-execução de código que for preciso. Mas, então talvez eu consideraria uma regex substituição ao longo de todo o arquivo, ou de cada * Principais Iniciar secção, depois de tudo.) Última edição por época; em 03/30/2008 07:22.. Motivo: Adicionar um snippet Perl para lembrar linha anterior |
|
||||
|
Citação:
|
|
||||
|
Acho que não tenham sido capturados corretamente todos os seus requisitos, mas pelo menos é um começo. Se estou autorizado a adivinhar, o que seria mais fácil é recolher a saída em uma variável e imprimi-la depois de ter visto * Fim principal e impressas fora da linha, que imediatamente precedeu.
|
|
||||
|
como fazê-lo em perl
Citação:
Estou tentando fazer a follwoing em perl Código:
nawk ' {
if($0 ~ /^\*Main Start/){
while( $0 !~ /^\*Main End/){
print $0;
getline;
}
}
} ' my.txt
Um código mais quero fazê-lo em perl pls me dar alguma idéia básica como fazê-lo sem criar ficheiros temporários .. Código:
TMP=/tmp/my_tmp$$
nawk '
/\*Main End/{
split(x,arr,",")
print "Loop " arr[1]
};
{x=$0
}
' my.txt > $TMP
nawk '{
if($0 ~ /^Loop/){
loop = $2
next;
}
if($0 ~ /^\*Main Start/){
printf "\nrepeat ("
print loop
} ' $TMP $my.txt
Thanks & Regards, user_prady Última edição por user_prady; em 03/31/2008 02:48.. |
![]() |
| Marcadores |
| Tags |
| perl, perl regex, perl turnos, regex, deslocar, turnos perl, solaris |
| Thread Tools | Pesquisar este Thread |
| Display Modes | Esta taxa Thread |
|
|