grep -n Problemchen

belubaba

belubaba

Tripel-As
Ich hatte heute ein Problem mit einem grep -n. (Solaris 8 )
Meine Datei war zu gross und grep konnte die Anzahl der gefunden Zeilen nicht verarbeiten.

Ich habe dann mit split -b500k datei.txt die Datei ein Einzelteile zerlegen müssen.

In den Manpages steht nichts darüber das es bei grep -n eine Beschränkung der Zeilenanzahl gibt. Kennt jemand die maximale zahl die grep -n finden kann. Bzw wie man das umgehen kann?

b.
 
Zuletzt bearbeitet:
Hallo Belubaba,
das hört sich für mich eher wie ein shell-Problem an: wird die Anzahl der zu verarbeitenden Argumente für die shell zu groß, gibt's eine Fehlermeldung (hatte ich mal bei mehreren zehntausend Dateien in einem Verzeichnis).
Das konnte man, glaube ich, im Solaris nur mit ulimit :think: beeinflussen. Habe es aber selbst nie gemacht.

Grüße, hmhweb
 
Hallo

Ich kenne zwar Solaris nicht, aber es ist wohl mehr interessant welche Version von grep du hast.
Wenn die Anzahl der Argumente zu groß wird, könnte eventuell ein vorgeschaltetes cat mit dazwischengeschalteten xargs helfen.
Wenn natürlich der Linecounter (-n) überläuft, weil er nicht mehr auf die 32-Bit passt, weiss ich auch nur den Rat die Datei zu teilen.
Aber das wird wohl eher nicht der Fall sein.
Notfalls musst du halt eine streamtool wie sed verwenden.
Auch perl könnte dein Problem lösen.
perl -anle 'print $.,$_ if ($_=~m/teststring/g)' bigfile

Gruß Wolfgang
 
Wolfgang_1 schrieb:
Hallo

Ich kenne zwar Solaris nicht, aber es ist wohl mehr interessant welche Version von grep du hast.
Wenn die Anzahl der Argumente zu groß wird, könnte eventuell ein vorgeschaltetes cat mit dazwischengeschalteten xargs helfen.
Wenn natürlich der Linecounter (-n) überläuft, weil er nicht mehr auf die 32-Bit passt, weiss ich auch nur den Rat die Datei zu teilen.
Aber das wird wohl eher nicht der Fall sein.
Notfalls musst du halt eine streamtool wie sed verwenden.
Auch perl könnte dein Problem lösen.
perl -anle 'print $.,$_ if ($_=~m/teststring/g)' bigfile

Gruß Wolfgang

Perl kann ich in diesem Fall nicht nutzen.

Vielleicht liegt es auch nicht am grep; ich poste mal das komplette Statement:

Code:
sed <logdatei.log -n 
"$(grep -n 'MeinSuchString' logdatei.log 
| cut -d: -f1 | awk '{print $1 - 3 "p"}')"|
grep -v Column >> ergebnis.log

Der Sinn des Statements ist das ich nach einer Zeile suche die immer unterschiedlich ist, aber grundsätzlich 2 Zeilen vor einem String kommt nach dem ich suchen kann. Und davon nur diese benötige die den String "Column" enthalten. Wobei es möglich ist das an anderen Stellen in der logdatei ebenfalls Zeilen vorhanden sein können die "Column" enthalten. Diese werden nicht für das Ergebnis benötigt.

Als Ergebnis bekomme ich bei zu grossen Datein grundsätzlich "Too many line numbers".
Lösen konnte ich das bisher nur dadurch das ich die Datei in sehr kleine (ca 100kb) Dateien zerlegt habe.

b.
 
Hallo
Was dein
sed <logdatei.log da soll, erschließt sich mir nicht.:think:
Auch bei deinem letztes
grep -v Column >> ergebnis.log
gibt mein grep
grep (GNU grep) 2.5.1
alles aus, was NICHT auf Column matcht.
?(
Du hast nicht gesagt, welche Version von Grep du nutzt.
Bitte sowas gerade bei nicht GNU Tools immer mit angeben, das hilft sehr bei Suche nach portierbaren Lösungen.


Problem wie ich es verstehe:
Suchstring2 wird gesucht: Muss matchen auf pattern2 AND zwei Zeilen davor muss ein String1 auf pattern1 matchen.

Schnellschuß ungeprüft.
grep -A2 'pattern1' inputfile |sed -e '3!d{/pattern2/p}' >result
grep gibt für jedes gefundene das Resultat gefolgt von zwei weiteren Zeilen aus.(macht insgesamt drei Zeilen)
sed löscht alles was nicht Zeile 3 ist,
und durchsucht den Rest (nämlich Zeile3) nach /pattern2/.
Matcht pattern zwei, wird die Zeile ausgegeben.
Wenn du nicht die gesamte Zeile willst, dann musst du da noch ein
ersetzen Filter anhängen.

Hoffe das hilft dir erstmal weiter.
Ob dein grep -A kann weiss ich latürnich nicht ;)
Gruß Wolfgang
 
Zuletzt bearbeitet:
Wolfgang_1 schrieb:
Hallo
Was dein
sed <logdatei.log da soll, erschließt sich mir nicht.:think:
Auch bei deinem letztes
grep -v Column >> ergebnis.log
gibt mein grep
grep (GNU grep) 2.5.1
alles aus, was NICHT auf Column matcht.
?(
Du hast nicht gesagt, welche Version von Grep du nutzt.
Bitte sowas gerade bei nicht GNU Tools immer mit angeben, das hilft sehr bei Suche nach portierbaren Lösungen.


Problem wie ich es verstehe:
Suchstring2 wird gesucht: Muss matchen auf pattern2 AND zwei Zeilen davor muss ein String1 auf pattern1 matchen.

Schnellschuß ungeprüft.
grep -A2 'pattern1' inputfile |sed -e '3!d{/pattern2/p}' >result
grep gibt für jedes gefundene das Resultat gefolgt von zwei weiteren Zeilen aus.(macht insgesamt drei Zeilen)
sed löscht alles was nicht Zeile 3 ist,
und durchsucht den Rest (nämlich Zeile3) nach /pattern2/.
Matcht pattern zwei, wird die Zeile ausgegeben.
Wenn du nicht die gesamte Zeile willst, dann musst du da noch ein
ersetzen Filter anhängen.

Hoffe das hilft dir erstmal weiter.
Ob dein grep -A kann weiss ich latürnich nicht ;)
Gruß Wolfgang

Das kommt davon wenn man beim arbeiten mal schnell was tippt. :)

grep -v Column soll natürlich die Zeilen ausgrenzen die Column enthalten.

Ich werde dein Statement morgen mal ausprobieren.

thx

b.
 

Ähnliche Themen

grep -p # Paragraph

Probs mit Perl script

Ausgabe in *.txt Datei & Struct

Server-Monitoring mit RRDTool

Zurück
Oben