Ich hatte einen Befehl, der eine Textdatei durcharbeitete, alle Vorkommen der Wörter zählte und wie folgt ausdruckte:
user@box $˜ magic-command-i-forgot | with grep | and awk | sort ./textfile.txt
66: the
54: and
32: I
16: unix
12: bash
5: internet
3: sh
1: GNU/Linux
Es wird also nicht Zeile für Zeile, sondern Wort für Wort gesucht, und zwar für alle Wörter, nicht nur für 1 Wort. Ich hatte es vor langer Zeit irgendwo im Internet gefunden, aber ich kann es nicht finden oder mich daran erinnern.
tr -s
, um mehrere Leerzeichen zu verarbeiten, insbesondere wenn Einrückungen auftreten.-g
(--general-numeric-sort
) Optionsort
kann in einigen Fällen vorzuziehen sein. ZBsort -n
wird so bleiben10\n1 4
wie es ist, behandelt1 4
wie es ist14
, währendsort -g
es korrekt behandelt wird wie es ist1 4\n10
.echo "Lorem ipsum dolor sit sit amet et cetera." | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -bnr
Beachten Sie, dass ich ein Anfänger bin. Daher kann ich mich irren. Sie können uns gerne beraten.Um die Eingabe in Wörter aufzuteilen, ersetzen Sie jedes Zeichen, das Sie als Worttrennzeichen betrachten, durch eine neue Zeile.
quelle
Grep und awk werden nicht verwendet, aber dies scheint zu tun, was Sie wollen:
quelle
set -f
) und die Interpunktion als Teil von Wörtern behandelt (was umständlich behoben werden kann, indem Interpunktionszeichen hinzugefügt werdenIFS
- viel Glück beim Versuch, Nicht-ASCII-Zeichensätze zu unterstützen). Dies ist bei sehr großen Eingabedateien nicht gut, da die gesamte Datei im Speicher abgelegt wird (diessort
ist intelligenter).Ich glaube, du bist auf so etwas aus?
natürlich kannst du das
awk
auch so machen :)quelle
Mit
awk/sort/uniq
lösung:quelle
Sortiert aufsteigend nach dem Teilen der Datei in Wörter.
Das einfache grep findet
fish
infisheye
, daher müssen Sie den grep-Befehl verbessern, um partielle Übereinstimmungen zu verhindern.Dauert ungefähr 3 Sekunden für eine 25k-Textdatei auf einer Maschine im Zeitalter der klassischen Festplatte (IDE).
Für größere Dateien oder häufig ausgeführte Vorgänge ist ein Hash-Map-Ansatz besser, für einen selten ausgeführten Job oder kleinere Dateien jedoch möglicherweise ausreichend.
quelle