The UNIX and Linux Forums  


Go Back   Die UNIX-und Linux-Foren > Top Foren > Shell Programmierung und Scripting
.
Google unix.com



Shell Programmierung und Scripting Post Fragen zu ksh, csh, sh, bash, Perl, PHP, sed, awk und anderen Shell-Skripte und Shell-Scripting-Sprachen hier.

Mehr UNIX-und Linux-Forum Themen Vielleicht finden Sie hilfreiche
Faden Thread Starter Forum Antworten Last Post
sed: Spiel finden und löschen Sie die Zeile oben cstovall Shell Programmierung und Scripting 3 07-02-2008 11:31 PM
Perl: Match eine Linie mit mehreren Suchmuster Juha Shell Programmierung und Scripting 10 04-09-2008 02:43 AM
Mehrere Linie mit der Benutzung von sed SiftinDotCom Shell Programmierung und Scripting 15 03-28-2008 02:12 PM
lesen und mit mehreren Zeilen in Perl zx1106 Shell Programmierung und Scripting 5 03-14-2008 10:21 PM
sed - Ersetzen Sie die Zeile enthält die Mustervergleich mit einer neuen Zeile kousikan Shell Programmierung und Scripting 2 03-24-2007 07:24 AM

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 Suche diesen Thread Rate Thread Anzeige-Modi
  #1 (permalink)  
Old 03-27-2008
user_prady user_prady is offline
Registrierte Nutzer
  
 

Join Date: Sep 2007
Beiträge: 163
Unhappy gefunden, wenn auf eine bestimmte Zeile in perl

Hallo Experten,

Ich bin Neuling auf perl, Einfach nur neugierig zu wissen, wie die folgenden im perl.
Angenommen, ich ve eine TXT-Datei wie unten. wenn sie gründet "* Main Start"
Dann gehen Sie zu "* Main Ende ,,,,,,,," patteren sammeln und nur die Anzahl der vorherigen Zeile "* Main Ende ,,,,,,," Muster. In meinem Fall ist es 5. Dann starten Sie excuting der Regel aus dem "* Main Start" Position

Im Anschluss ist das Bild .. Ich möchte nicht zu einer temp-Datei auch ..
Input-Datei:

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,,,,,,,,

Ausgang:

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

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

I ve, um alle Zeilen wie es ist, wenn es eine Zeile, die mit *. Thats, warum ich wie unten

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;

Jede Hilfe die meisten geschätze ..

Grüße,
user_prady

Zuletzt bearbeitet von user_prady; am 03-28-2008 12:51 AM..
  #2 (permalink)  
Old 03-30-2008
user_prady user_prady is offline
Registrierte Nutzer
  
 

Join Date: Sep 2007
Beiträge: 163
Ist es nicht möglich!

Zitat:
Zitat von user_prady View Post
Hallo Experten,

Ich bin Neuling auf perl, Einfach nur neugierig zu wissen, wie die folgenden im perl.
Angenommen, ich ve eine TXT-Datei wie unten. wenn sie gründet "* Main Start"
Dann gehen Sie zu "* Main Ende ,,,,,,,," patteren sammeln und nur die Anzahl der vorherigen Zeile "* Main Ende ,,,,,,," Muster. In meinem Fall ist es 5. Dann starten Sie excuting der Regel aus dem "* Main Start" Position

Im Anschluss ist das Bild .. Ich möchte nicht zu einer temp-Datei auch ..
Input-Datei:

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,,,,,,,,

Ausgang:

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

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

I ve, um alle Zeilen wie es ist, wenn es eine Zeile, die mit *. Thats, warum ich wie unten

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;

Jede Hilfe die meisten geschätze ..

Grüße,
user_prady
Hallo Freunde ist es überhaupt zu tun. Pls help ..

Danke

Zuletzt bearbeitet von user_prady; am 03-30-2008 11:07 AM..
  #3 (permalink)  
Old 03-30-2008
Ära era is offline Forum Advisor  
Herder sinnlosen Katzen (Am Sabbatical)
  
 

Join Date: März 2008
Location: / es / ist / nur / bin / sh
Beiträge: 3652
Hängen nicht von mir, ich muss gehen zurück zu meinem Job bald.

Es gibt eine Reihe von Möglichkeiten, dies zu tun, natürlich. Die altmodische Variante wäre zu erinnern, der vorherigen und drucken, wenn Sie sehen, den Terminator. Die wirklich Brute Perl Ansatz wäre, schlürfen die gesamte Datei und ersetzen alles, was mit einem leeren String mit Ausnahme der Linie vor dem Terminator. Es ist eine in der Perl FAQ zu diesem; perlfaq6 und blättern Sie um und damit zusammenhängende Fragen. (Die Frage nach der C Bemerkungen weiter unten die Seite ein paar Tips geben.)

Aber die "vorherige Zeile"-Lösung ist die einfachste in diesem Fall, wenn Sie keine weiteren Anforderungen.


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

Sie sind sich nicht sicher über die Flow Control Sie haben versucht zu beschreiben. Sind Sie soll daran erinnern alles vom Hauptbahnhof starten, bis Ende wichtigsten und drucken, dass nach der Ausgabe der letzten Zeile vor dem Haupt-Ende? (Ich vermute, diese bereits qualifiziert als Pseudo-Code-Implementierung von dem, was es braucht. Aber dann würde ich vielleicht eine regex substitution über die gesamte Datei, oder jeder * Main Start Abschnitt, nach dem alle.)

Zuletzt bearbeitet von ERA; 03-30-2008 auf 07:22 AM.. Grund: Fügen Sie ein Perl-Snippet für die Erinnerung an vorherige Zeile
  #4 (permalink)  
Old 03-30-2008
user_prady user_prady is offline
Registrierte Nutzer
  
 

Join Date: Sep 2007
Beiträge: 163
Zitat:
Zitat von Ära View Post
Hängen nicht von mir, ich muss gehen zurück zu meinem Job bald.

Es gibt eine Reihe von Möglichkeiten, dies zu tun, natürlich. Die altmodische Variante wäre zu erinnern, der vorherigen und drucken, wenn Sie sehen, den Terminator. Die wirklich Brute Perl Ansatz wäre, schlürfen die gesamte Datei und ersetzen alles, was mit einem leeren String mit Ausnahme der Linie vor dem Terminator. Es ist eine in der Perl FAQ zu diesem; perlfaq6 und blättern Sie um und damit zusammenhängende Fragen. (Die Frage nach der C Bemerkungen weiter unten die Seite ein paar Tips geben.)

Aber die "vorherige Zeile"-Lösung ist die einfachste in diesem Fall, wenn Sie keine weiteren Anforderungen.


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

Sie sind sich nicht sicher über die Flow Control Sie haben versucht zu beschreiben. Sind Sie soll daran erinnern alles vom Hauptbahnhof starten, bis Ende wichtigsten und drucken, dass nach der Ausgabe der letzten Zeile vor dem Haupt-Ende? (Ich vermute, diese bereits qualifiziert als Pseudo-Code-Implementierung von dem, was es braucht. Aber dann würde ich vielleicht eine regex substitution über die gesamte Datei, oder jeder * Main Start Abschnitt, nach dem alle.)
Vielen Dank für Ihre Zeit Güte .. Ich komme bald versuchen Sie erwähnten Art und Weise ..
  #5 (permalink)  
Old 03-30-2008
Ära era is offline Forum Advisor  
Herder sinnlosen Katzen (Am Sabbatical)
  
 

Join Date: März 2008
Location: / es / ist / nur / bin / sh
Beiträge: 3652
Ich glaube nicht, dass ich gerade gemacht haben alle Ihre Anforderungen korrekt, aber zumindest ist es ein Anfang. Wenn ich zu erraten, was wäre am einfachsten ist, sammeln die Ausgabe in einer Variable und drucken Sie es aus, nachdem Sie gesehen haben * Main End und ausgedruckt die Linie, die unmittelbar vor ihr.
  #6 (permalink)  
Old 03-31-2008
user_prady user_prady is offline
Registrierte Nutzer
  
 

Join Date: Sep 2007
Beiträge: 163
wie es in Perl

Zitat:
Zitat von Ära View Post
Ich glaube nicht, dass ich gerade gemacht haben alle Ihre Anforderungen korrekt, aber zumindest ist es ein Anfang. Wenn ich zu erraten, was wäre am einfachsten ist, sammeln die Ausgabe in einer Variable und drucken Sie es aus, nachdem Sie gesehen haben * Main End und ausgedruckt die Linie, die unmittelbar vor ihr.
Ich habe fast alle Art und Weise mit anderen, und Redo letzte Befehl in perl , Aber ich kann nicht richtig in diese Syntax perl. Ich weiß, das ist wirklich einfach, aber dennoch kann ich die effiziente Art und Weise mit, während und in der nächsten perl.

Ich versuche zu tun, die in folgenden perl


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

Ein weiterer Code möchte ich es in perl Bitte geben Sie mir einige grundlegende Idee, wie es geht, ohne dass Sie alle temporären Dateien ..


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

Zuletzt bearbeitet von user_prady; am 03-31-2008 02:48 AM..
Closed Thread

Lesezeichen

Tags
perl, perl regex, perl Verschiebung, regex, Schicht, Verlagerung perl, solaris

Thread Tools Suche diesen Thread
Suche diesen Thread:

Erweiterte Suche
Anzeige-Modi Rate this thread
Rate this thread:

Forumregeln
Du möglicherweise nicht neue Themen
Du möglicherweise nicht nach Antworten
Du möglicherweise nicht post-Anlagen
Du möglicherweise nicht bearbeiten Sie Ihre Beiträge

BB-Code ist Auf
Smilies sind Auf
[IMG] Code Auf
HTML-Code ist Aus
Trackbacks sind Auf
Pingbacks sind Auf
Refbacks sind Auf




Alle Zeiten sind GMT -4. Es ist jetzt 05:39 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Ltd. Sprachliche Übersetzungen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
Die UNIX-und Linux-Foren Content © Copyright 1993-2009. Alle Rechte Reserved.Ad Management von RedTyger

Content Relevant URLs durch vBSEO 3.2.0