Da ist ja mein Problem, ich will in einem Stream

Post Reply
Message
Author
Wolfgang+Jaschke

Da ist ja mein Problem, ich will in einem Stream

#1 Post by Wolfgang+Jaschke »

die Zeilen und die Anzahl haben. Es funzt z.B. so :
#
# 1. Die Zeilen ausgeben die Pattern 1 und Pattern 2 enthalten
#
grep $Pattern1 File | tee /tmp/erg1 | grep $Pattern2 tee /tmp/erg2
#
# 2. Die Anzahl der Zeilen ausgeben
#
AnzPattern1 = cat /tmp/erg1 | wc -l
AnzPattern2 = cat /tmp/erg2 | wc -l
echo "$Pattern1 wurde $AnzPattern1 x gefunden"
echo "darin wurde $Pattern2 $AnzPattern2 x gefunden"

Nur diese blöden Zwischendateien /tmp/erg1 und /tmp/erg2 die ich ja nur für wc brauche, bremsen die ganze Geschichte aus, weil Plattenzugriff. (Die Datei ist wirklich sehr gross!!)

Ich MUSS sie aber anlegen, weil ich die Pipe brauche um das Suchergebnis des 1. grep -> 2. grep zu schicken.

Ich müsste also eigentlich das Ergebnis des 1. grep auf 2 Pipes senden:
Eine zum wc und die andeer zum nächsten grep...
Ich dache auch, das ich da irgendwas über stdin und stderr machen könnte, aber es gibt nur 1 Pipe und es bleibt auch nur 1 Pipe die ich zur Verfügung habe.
Forken vielleicht? Aber wie forkt man unter bash??
Named Pipes? Dann hätte ich beliebig viele, aber da habe ich u.U. ganz nette Seiteneffekte, weil global verfügbar..


Fragen über solche...

Vielen Dank für Eure Postings.

Wolfgang Jaschke

Sorry, falsch einsortiert ....

#2 Post by Wolfgang Jaschke »

Diese Nachricht sollte eigentlich in meinem u.a. Thread landen.
Kommt nicht wieder vor..

Jochen

Re: Ohne Named Pipes

#3 Post by Jochen »

Ist das gewollt, dass bei Deinem obigen Skript Zeilen mit Pattern2 nur gezählt werden, wenn auch Patern1 drinne vorgekommen ist?
Ansonsten würde ich den awk verwenden:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
awk '
/Pattern1/ {
anzPattern1++
if (match ($0, /Pattern2/)) {
anzPattern2++
}
}
END {
print "Zeilen mit Muster 1: " anzPattern1
print "Zeilen mit Muster 1 und 2: " anzPattern2
} ' File </font><hr></pre></blockquote>

Getestet, übernimm's mit Cut'n'Paste und es wird laufen.

Und nächstes Mal mach die Betreffzeile nicht so lang! Das Ultraboard pappt noch "Re: " vorneweg und beschwert sich dann, der Betreff-Text sei zu lang... <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Post Reply