2017-02-07 7 views
1

Ich möchte die Anzahl der Vorkommen von, sagen wir, das Zeichen '[', rekursiv in allen Dateien eines Verzeichnisses, die die gleiche Erweiterung, z. * .c. Ich arbeite mit dem SO Solaris in Unix.Anzahl der Vorkommen in mehreren Dateien zählen

ich versucht, einige Lösungen, die in anderen Beiträgen gegeben sind, und der einzige, der diese funktioniert ist, mit diesem OS, da ich nicht den Befehl grep -o verwenden können: Ich will

sed 's/[^x]//g' filename | tr -d '012' | wc -c 

Wo x ist das Auftreten zählen. Dieser funktioniert, aber es ist nicht rekursiv, gibt es einen Weg, es rekursiv zu machen?

+0

Sie können es für ein bestimmtes Verzeichnis rekursiv machen, indem Sie 'filename' durch' * '(für das aktuelle Verzeichnis) oder'/dir/* 'für ein anderes Verzeichnis oder sogar' /dir1/*.txt/dir2/* ersetzen. txt', um zwei Verzeichnisse zu scannen. Wenn Sie rekursiv nach allen Verzeichnissen suchen wollen, dann ist 'find' der richtige Weg. –

+0

Danke George, du hast vollkommen recht und ich möchte die letztere Option, also habe ich gefunden, wie Grisha mir vorschlug und arbeitete, danke! – Vpdj

Antwort

1

Sie können eine rekursive Auflistung von find abrufen und Befehle mit seinem -exec Argument ausführen.

Ich würde vorschlagen, wie:

find . -name '*.c' -exec cat {} \; | tr -c -d ']' | wc -c 

Das -c Argument tr bedeutet das Gegenteil der Zeichenfolge zu verwenden, geliefert - das heißt in diesem Fall paßt alles aber].

Der Befehl . im Befehl find bedeutet, im aktuellen Verzeichnis zu suchen, aber Sie können dort auch einen anderen Verzeichnisnamen angeben.

+0

Diese Lösung funktioniert total, vielen Dank! – Vpdj

0

Ich hoffe, Sie haben nawk installiert. Dann können Sie nur:

nawk '{a+=gsub(/\]/,"x")}END{print a}' /path/* 
+0

nawk funktioniert nicht sehr gut mit meinem Betriebssystem, aber danke trotzdem für die Antwort! – Vpdj

0

Sie können einen Code-Schnipsel selbst schreiben. Ich schlage vor, Sie Folgendes ausführen:

awk '{for (i=1;i<=NF;i++) if ($i=="[") n++} END{print n}' *.c 

Dies wird für „[“ in allen Dateien im vorliegenden Verzeichnis suchen und die Anzahl der Vorkommen drucken.

+0

Ich habe versucht, diese Lösung, aber es scheint, es gibt die Anzahl der Dateien, wo dieses Ereignis auftritt, und ich möchte wissen, wie oft das Zeichen in allen Dateien erscheint. – Vpdj

+0

Sind Sie sicher? Weil ich denselben Code benutzt habe und es mir gezeigt hat ... 10, auch wenn das Verzeichnis nur 5 Dateien enthält. –

+0

Ja, ich habe diesen Code mit einer Datei verwendet, die 6 Vorkommen des Zeichens ']' hatte und es zeigte mir 1. Dann erstellte ich eine andere Datei mit der gleichen Anzahl von Vorkommen und zeigte mir 2, so meine Schlussfolgerung war es nur die Dateien gezählt in dem der Charakter mindestens einmal erschien, aber ich weiß nicht warum wir verschiedene Lösungen haben, vielleicht mache ich etwas falsch, danke für deine Antwort! – Vpdj

Verwandte Themen