ubuntuusers.de

Verzeichnis nach Dateien durchsuchen und mit grep nach einem Begriff suchen

Status: Ungelöst | Ubuntu-Version: Ubuntu
Antworten |

dreipapier

Anmeldungsdatum:
13. September 2010

Beiträge: Zähle...

Hallo liebes Forum,

ich habe mich in der Hoffnung auf meine Fragen Antworten finden zu können in diesem Forum angemeldet. Ich hoffe ihr könnt mir helfen ☹

Folgendes Problem: Ich habe in einem Verzeichnis einige Dateien die so aussehen BF.INT_26_I_X_0084001.201007_XYZ_Output_G Von denen gibt es eine ganze Menge... in diesem Verzeichnis

In diesen Dateien wiederum gibt es 668 Stellige Sätze. An der Stelle 338 steht ein "S". Wobei es in jeder Datei mehrere 668 Stellige Sätze geben kann, also es können mehrere "S" ( steht für Success ) vorkommen.

Ich habe folgende AUfgabe: Ich muss alle Daten in dem Verzeichnis /home/Probe/testen/sent durchsuchen und überprüfen ob ein "S" oder auch mehrere" "S" in einem Datei existieren. Wenn es existiert soll ich es hochzählen. Beispiel: Es gibt 25 Dateien in /home/Probe/testen/sent und es gibt 33 "S" in den ganzen Dateien. In der 5 und 10 Datei gibt es jeweils 4 "S". Also insgesamt 33 "S". Das ist alles.

Ich habe bis jetzt verzweifelt folgendes versucht oder zumindestens eine IDEE gehabt ☹ Ich wollte eine For-Schleife erstellen die alle Dateien in /home/Probe/testen/sent durchsucht. Das Durchsuchen nach "S" wollte ich mit grep machen. Nur ich weiß nicht ob ich dort eine For-Schleife, da es mehrere "S" in einer Datei geben kann. Sprich –> Schau nach ob es die Zeichenkette " S " in BF.INT_26_I_X_0084001.201007_XYZ_Output_G gibt ? Wenn ja zähle hoch ( zahl = i ) oder so?

Ich bin mittlerweile verzweifelt nach einer Lösung am suchen :[1]

  • 1: ( ich wäre sehr dankbar, wenn jemand ein kurzes Skript aufschreiben könnte. Ein herzliches Danke schonmal !!!! viele Grüße Tim

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21847

Wohnort: Lorchhausen im schönen Rheingau

Erste Idee: Bau erst mal den grep-befehl zusammen, dass er funktioniert.dann gibst du die Ausgabe des grep weiter an wc -l, das Dir die Anzahl der gefundenen Zeilen ausgibt. Du könntest also mit

1
$($(`dein_grep | wc -l`)+count)

oder so ähnlich in einem Schleifendurchlauf die die gefundenen Zeilen hochählen.

dreipapier

(Themenstarter)

Anmeldungsdatum:
13. September 2010

Beiträge: 5

Hallo redknight,

zunächst danke für deine Hilfe.

ich schaffe derzeit folgendes

Mit dem Befehl "grep " S " BF.INT_26_I_X_0084001.201007_XYZ_Output_G | wc -l" gibt er mir die Anzahl der Zeilen, in denen "S" vorkommt. Somit ist das erste geschafft. Nur muss ich das für alle Dateien machen. Also BF.INT_26_I_X_0084001.201007_XYZ_Output_G <<<<< von denen gibt es in /home/Probe/testen/sent mehrere. Wie kann ich das machen? Eine For schleife? Die alle Dateien durchschaut und bei denen ein "S" vorhanden ist hochzaehlt. Wäre jemand noch so nett und könnte mir den Code dazu aufschreiben, wie ich alle dateien automatisch durchsuchen kann?

Vielen Dank

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21847

Wohnort: Lorchhausen im schönen Rheingau

Eine FOR-Schleife klingt richtig dafür.

dreipapier

(Themenstarter)

Anmeldungsdatum:
13. September 2010

Beiträge: 5

Danke für die Antwort, weiß denn jemand, wie der Code dafür aussehen könnte???

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21847

Wohnort: Lorchhausen im schönen Rheingau

Ein bisschen Eigenarbeit musst du schon auch tun. Der schwierigere Teil der Programmlogik ist erledigt, du weißt dass du den funktionierenden grep in eine For-Schleife machen musst. Wenn du das nicht selbst kannst und auch nicht lernen willst, solltest du keine Shellscripte benutzen.

Barabbas

Avatar von Barabbas

Anmeldungsdatum:
31. März 2007

Beiträge: 1651

Wohnort: Münster

Ja, redknight vermutlich auch. Er wollte dir nur deine Hausaufgaben nicht vorkauen. Man ärgert sich ja schon etwas, wenn jemand nichtmal eben die verlinkte Seite liest und sagt: "Hier ist meine Schleife, aber XY funktioniert noch nicht."

for i in *; do BEFEHL HIER EINFÜGEN; echo "Datei '$i': $hits Treffer"; done

dreipapier

(Themenstarter)

Anmeldungsdatum:
13. September 2010

Beiträge: 5

Also, ich habe das Problem, dass ich im Verzeichnis jede Datei einzelnd angeben muss.

Bei for i in home/Probe/testen/sent do grep " S " | wc -l; done

hierbei gibt er nix aus... Wenn ich jedoch eine Datei im Verzeichnis angebe, gibt er mir die Anzahl der Zeilen aus...

Bei grep " S " BF.INT_26_I_X_0084001.201007_XYZ_Output_G | wc -l gibt er wohl die anzahl der Zeilen aus...

Woran könnte das denn liegen?

VG

Barabbas

Avatar von Barabbas

Anmeldungsdatum:
31. März 2007

Beiträge: 1651

Wohnort: Münster

versuche es mal mit

for i in /PFAD/*

Wie in meinem Beispiel halt.

Schönen Gruß,

brb

Antworten |