Linux shell script?

2 Antworten

Das ganze kannst du mittels 'grep' und 'wc' realisieren. In einem Script z.B. so:

#!/bin/bash
count="$(grep -o -i "${1}" "${2}" | wc -l)"
echo "Die Zahl ${1} kommt ${count} mal in ${2} vor"

Wenn du jetzt das Script aufrufst, mit den zwei Parametern, also z.B.

bash counter.sh 55 test.txt

erhälst du das erwartete Ergebnis

Die Zahl 55 kommt 2 mal in test.txt vor

Anhand dessen kannst du das ja für die anderen Fälle, die du prüfen möchtest ausbauen..

Woher ich das weiß:Studium / Ausbildung – Studium in theoretischer Informatik (Master)

grep ist eines der Werkzeuge, die du dafür vom Script aufrufen kannst, insbesondere mit der -c option. Dessen Ausgabe willst du dann eventuell filtern und deine eigene Ausgabe damit aufbauen.

Ansonsten kann es auch nützlich sein, für solche Aufgaben mal awk anzuschauen, auch aus einem shell script heraus aufrufbar, und sehr mächtig bezüglich Untersuchen von Texten und Reagieren auf zu definierbare Charakteristiken des Textes.

Für simples Zählen von String-vorkommen würd ich aber auf grep -c zurückgreifen.

Woher ich das weiß:Hobby – langjähriger Implementator von Skurrilem
AncheCameo  15.12.2022, 19:22
Für simples Zählen von String-vorkommen würd ich aber auf grep -c zurückgreifen.

grep -c zählt nur die Zeilen, in welchen ein String vorkommt. Sobald dieser aber in einer Zeile mehrfach vorkommt, erleidest du Schiffbruch.

0
Bushmills145  15.12.2022, 19:28
@AncheCameo

Jo, das ist richtig. Aber macht es nicht unbrauchbar, denn Kommas gegen linefeeds zu ersetzen ist recht einfach - und davon hab ich abgesehen, weil das Beispiel keinen Hinweis darauf gibt, dass das vorkommen kann. Meine Erwartung war, dass, sollte dies nötig sein, dieser Fall auf zumindest einer Zeile gezeigt worden wäre - und da nicht, wollte ich den Tip nicht unnötig komplizieren mit etwas, was allen Anscheins nach unnötig ist.

0
AncheCameo  15.12.2022, 19:48
@Bushmills145

Na, so kompliziert ist das auch wieder nicht:

cat Zaehltext.txt 
Mähen Äbte Heu?
Nie mähen Äbte Heu.
Wenn Äbte mähen, mähen Äbte Gras.

Wenn man nur die Zeilen, in denen ein Muster vorkommt, zählen will:

fgrep -c 'Äbte' Zaehltext.txt 
3

Will man dagegen wissen, wie oft das Muster tatsächlich vorkommt:

fgrep -o 'Äbte' Zaehltext.txt | wc -l
4

Da finde ich deine Idee, die Kommata durch Linefeeds zu ersetzen, umständlicher.

0
Bushmills145  15.12.2022, 19:51
@AncheCameo

Mit Zeilenumbruch wär das dann auch in gedankliche Richtung gegangen, jedes Wort als hash in ein Array von Zählern zu verwenden, um Anzahl Vorkommen von beliebigem Wort im Nachhinein abfragen zu können, nicht nur ein Ergebnis pro Suchterm. Dafür wär es schon angenehm, ein Wort pro Zeile zu haben. Und das dann eventuell als "reinen" shell script, ohne externes grep oder awk oder fgrep.

0