grep -n Problemchen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von belubaba, 18.10.2005.

  1. #1 belubaba, 18.10.2005
    Zuletzt bearbeitet: 18.10.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    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.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. hmhweb

    hmhweb Mitglied

    Dabei seit:
    29.11.2004
    Beiträge:
    46
    Zustimmungen:
    0
    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
     
  4. #3 Wolfgang, 19.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  5. #4 belubaba, 24.10.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    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.
     
  6. #5 Wolfgang, 24.10.2005
    Zuletzt bearbeitet: 24.10.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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
     
  7. #6 belubaba, 24.10.2005
    belubaba

    belubaba Tripel-As

    Dabei seit:
    20.09.2005
    Beiträge:
    184
    Zustimmungen:
    0
    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.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

grep -n Problemchen

Die Seite wird geladen...

grep -n Problemchen - Ähnliche Themen

  1. Kurztipp: Unerwünschte grep-Ausgaben vermeiden

    Kurztipp: Unerwünschte grep-Ausgaben vermeiden: Selbst aus altbekannten Programmen kann man oft noch einiges mehr herausholen - man muss sich nur einmal gründlich mit ihnen auseinandersetzen....
  2. GNU Grep 2.19 freigegeben

    GNU Grep 2.19 freigegeben: Von dem Textsuchprogramm GNU Grep ist jetzt Version 2.19 erschienen, die um durchschnittlich zehn Prozent schneller als die Vorgängerversion...
  3. KWin 4.90.1 wartet auf Bugreports

    KWin 4.90.1 wartet auf Bugreports: Martin Gräßlin, Maintainer des KDE-Fenstermanagers, hat den Code für KWin/5 als für gut genug befunden, um ihn im erweiterten Kreis testen zu...
  4. grep Ausgabe an ls übergeben

    grep Ausgabe an ls übergeben: Kann ich die Ausgabe von grep (es sind dateinamen des lokalen verzeichnisses) irgendwie gleich weiterpipen zu ls? Also so das ich zu den...
  5. Grep bis zum ersten Vorkommen

    Grep bis zum ersten Vorkommen: Hallo Zusammen, ich habe ein kleines Problem. :) Die Ausgangssituation ist folgende: Der String...