The UNIX and Linux Forums  

Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
sed: find match en verwijdert u de bovenstaande regel cstovall Programmeren en Shell Scripting 3 07-02-2008 11:31 PM
Perl: Match een lijn met meerdere patronen zoeken Juha Programmeren en Shell Scripting 10 04-09-2008 02:43
Meerdere lijn match gebruik van sed SiftinDotCom Programmeren en Shell Scripting 15 03-28-2008 02:12 PM
lezen en match meerdere lijnen in perl zx1106 Programmeren en Shell Scripting 5 03-14-2008 10:21 PM
sed - Vervang Line bevat de Pattern match met een nieuwe lijn kousikan Programmeren en Shell Scripting 2 03-24-2007 07:24

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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 03-27-2008
user_prady user_prady is offline
Geregistreerde gebruiker
  
 

Join Date: Sep 2007
Posts: 163
Unhappy indien match gevonden naar een bepaalde regel in perl

Hallo deskundigen,

Ik ben newbie aan perl, Gewoon nieuwsgierig om te weten hoe je het volgende in perl.
stel ik heb een txt bestand, zoals hieronder. wanneer het sticht "* Belangrijkste Start"
Ga vervolgens naar "* Belangrijkste Einde ,,,,,,,," patteren en net verzamelt de nummer uit de vorige regel van "* Belangrijkste Einde ,,,,,,," patroon. In mijn geval is het 5. Dan beginnen excuting normaal gesproken uit de "* Belangrijkste Start" positie

Hieronder de foto .. I dont wilt maken een tijdelijk bestand ook ..
Input file:

Code:
*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,,,,,,,,

output:

Code:
*Init End
*Main Start
 repeat(5);
process all lines as usual here.

............
*Main End,,,,,,,,,

Ik heb voor het afdrukken van alle lijnen zoals het is als het vinden een lijn die begint met *. Dat is waarom ik doe zoals hieronder

Code:
 if(m/^\*/){
              print "//", $_;
              next;
    }


Code:
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;

Alle hulp meest gewaardeerd ..

groeten,
user_prady

Laatst bewerkt door user_prady; op 03.28.2008 12:51 AM..
  #2 (permalink)  
Old 03-30-2008
user_prady user_prady is offline
Geregistreerde gebruiker
  
 

Join Date: Sep 2007
Posts: 163
Is het niet mogelijk!

Citaat:
Oorspronkelijk geplaatst door user_prady View Post
Hallo deskundigen,

Ik ben newbie aan perl, Gewoon nieuwsgierig om te weten hoe je het volgende in perl.
stel ik heb een txt bestand, zoals hieronder. wanneer het sticht "* Belangrijkste Start"
Ga vervolgens naar "* Belangrijkste Einde ,,,,,,,," patteren en net verzamelt de nummer uit de vorige regel van "* Belangrijkste Einde ,,,,,,," patroon. In mijn geval is het 5. Dan beginnen excuting normaal gesproken uit de "* Belangrijkste Start" positie

Hieronder de foto .. I dont wilt maken een tijdelijk bestand ook ..
Input file:

Code:
*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,,,,,,,,

output:

Code:
*Init End
*Main Start
 repeat(5);
process all lines as usual here.

............
*Main End,,,,,,,,,

Ik heb voor het afdrukken van alle lijnen zoals het is als het vinden een lijn die begint met *. Dat is waarom ik doe zoals hieronder

Code:
 if(m/^\*/){
              print "//", $_;
              next;
    }


Code:
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;

Alle hulp meest gewaardeerd ..

groeten,
user_prady
Hoi vrienden is er toch om dat te doen. Pls help ..

Bedankt

Laatst gewijzigd door user_prady; op 03.30.2008 11:07..
  #3 (permalink)  
Old 03-30-2008
tijdperk era is offline Forum Advisor  
Herder van Nutteloze Cats (On Sabbatical)
  
 

Join Datum: maart 2008
Locatie: / er / is / alleen / bin / sh
Berichten: 3652
Zijn niet afhankelijk van mij, ik moet terug te gaan naar mijn dagelijks werk binnenkort.

Er is een aantal manieren om dit te doen, natuurlijk. De ouderwetse variant zou zijn om te onthouden de vorige regel en print dat wanneer je de terminator. De echt bruut Perl aanpak zou zijn om Slurp het hele bestand en vervangingstechnologieën alles met een lege string met uitzondering van de regel vóór de terminator. Er is een in de Perl Veelgestelde vragen over; perlfaq6 en ga rond voor vragen. (De vraag over C opmerkingen verderop in de pagina heeft een aantal tips, too.)

Maar de "vorige regel" oplossing is absoluut de eenvoudigste in dit geval, als u geen verdere eisen.


Code:
perl -ne 'BEGIN { $matching = 0; }
  $matching = 1 if (m/^\*Main Start/);
  next unless $matching;
  print $prev if (defined $prev && m/^\*Main End/);
  $prev = $_'

Niet zeker over de flow control u probeerde te beschrijven. Bent u te onthouden van alles belangrijkste begin tot eind belangrijkste en print dat na de output van de laatste regel vóór belangrijkste einde? (Ik denk dat dit reeds in aanmerking komt als een pseudo-code uitvoering van wat er nodig is. Maar dan zou ik misschien overwegen een regex substitutie over het hele dossier, of van iedere * Main Start afdeling, na alles.)

Laatst gewijzigd door tijdperk; op 03.30.2008 07:22.. Reden: Voeg een Perl fragment voor het herdenken van vorige regel
  #4 (permalink)  
Old 03-30-2008
user_prady user_prady is offline
Geregistreerde gebruiker
  
 

Join Date: Sep 2007
Posts: 163
Citaat:
Oorspronkelijk geplaatst door tijdperk View Post
Zijn niet afhankelijk van mij, ik moet terug te gaan naar mijn dagelijks werk binnenkort.

Er is een aantal manieren om dit te doen, natuurlijk. De ouderwetse variant zou zijn om te onthouden de vorige regel en print dat wanneer je de terminator. De echt bruut Perl aanpak zou zijn om Slurp het hele bestand en vervangingstechnologieën alles met een lege string met uitzondering van de regel vóór de terminator. Er is een in de Perl Veelgestelde vragen over; perlfaq6 en ga rond voor vragen. (De vraag over C opmerkingen verderop in de pagina heeft een aantal tips, too.)

Maar de "vorige regel" oplossing is absoluut de eenvoudigste in dit geval, als u geen verdere eisen.


Code:
perl -ne 'BEGIN { $matching = 0; }
  $matching = 1 if (m/^\*Main Start/);
  next unless $matching;
  print $prev if (defined $prev && m/^\*Main End/);
  $prev = $_'

Niet zeker over de flow control u probeerde te beschrijven. Bent u te onthouden van alles belangrijkste begin tot eind belangrijkste en print dat na de output van de laatste regel vóór belangrijkste einde? (Ik denk dat dit reeds in aanmerking komt als een pseudo-code uitvoering van wat er nodig is. Maar dan zou ik misschien overwegen een regex substitutie over het hele dossier, of van iedere * Main Start afdeling, na alles.)
Thanks a lot Era voor uw vriendelijkheid .. Ik kom proberen uw genoemde manier ..
  #5 (permalink)  
Old 03-30-2008
tijdperk era is offline Forum Advisor  
Herder van Nutteloze Cats (On Sabbatical)
  
 

Join Datum: maart 2008
Locatie: / er / is / alleen / bin / sh
Berichten: 3652
Ik denk niet dat ik gevangen al uw eisen correct maar het is tenminste een begin. Als ik mag raden, wat zouden makkelijkste is het verzamelen van de output in een variabele en afdrukken nadat u hebt gezien * Belangrijkste End en uitgeprint de lijn die onmiddellijk voorafgegaan is.
  #6 (permalink)  
Old 03-31-2008
user_prady user_prady is offline
Geregistreerde gebruiker
  
 

Join Date: Sep 2007
Posts: 163
hoe dat te doen in perl

Citaat:
Oorspronkelijk geplaatst door tijdperk View Post
Ik denk niet dat ik gevangen al uw eisen correct maar het is tenminste een begin. Als ik mag raden, wat zouden makkelijkste is het verzamelen van de output in een variabele en afdrukken nadat u hebt gezien * Belangrijkste End en uitgeprint de lijn die onmiddellijk voorafgegaan is.
Ik probeerde bijna alle manier met behulp van de volgende, redo en laatste opdracht in perl , Maar ik kan niet deze syntaxis correct in perl. Ik weet dat het simpel is, maar nog steeds I cant vinden de efficiënte wijze gebruik te maken terwijl en volgende verklaring in perl.

Ik probeer te doen follwoing in perl


Code:
nawk ' {
        if($0 ~ /^\*Main Start/){
	     while( $0 !~ /^\*Main End/){
	     print $0;
             getline;
        }
     }
 } ' my.txt

Een code die ik heb willen doen in perl pls geef me een idee hoe dat te doen zonder dat dit leidt tot een tijdelijke bestanden ..


Code:
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

Laatst gewijzigd door user_prady; op 03.31.2008 02:48..
Closed Thread

Bladwijzers

Labels
perl, Perl regex, perl verschuiving, regex, verschuiven, verschuiving perl, solaris

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 08:22 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0