Login
Newsletter

Thema: Zerlegen einer Datei in Wörter

8 Kommentar(e) || Alle anzeigen ||  RSS
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
0
Von Ween am Mo, 14. Februar 2000 um 09:23 #
Hi,

was macht denn "uniq -c" ?

cu

[
| Versenden | Drucken ]
  • 0
    Von Jochen am Mo, 14. Februar 2000 um 11:57 #
    "uniq": Programm zur Behandlung/Unterdrückung mehrfach auftretender, gleichlautender Eingabezeilen. Per Default wird jede Zeile nur einmal ausgegeben, auch wenn sie mehrfach auftritt. Option "-c" steht für "count", d.h. es wird jede Zeile gezählt, wie oft sie auftritt, und dies dann vor der Zeile einmal ausgegeben.
    [
    | Versenden | Drucken ]
0
Von Jochen am Mo, 14. Februar 2000 um 12:15 #
Hm, schon in Ordnung, aber Verbesserungsmöglichkeiten sind immer da. In der o.a. Lösung ist ein Wort, auf das ein Interpunktionszeichen folgt, ein anderes als eins ohne. Weiterhin gelten Tabulatoren zu den Wörtern dazu, und so Sachen wie eckige Klamern auch. Also sagen wir einfach mal, dass tatsächlich nur reine Wörter interessieren:
tr -c '[A-Z][a-z]' '[\n*]' \| ...
Durch die Option "-c" wird tr angewiesen, alle Zeichen als erstes Argument zu verwenden, die übrigbleiben, wenn man die tatsächlich aufgeführten vom Zeichensatz abzieht (-c: complement). Also werden alle Zeichen, die nicht zu den Buchstaben gehören, durch Newlines ersetzt. Die Schreibweise des zweiten Arguments bedeutet, das tr diese Zeichenkette auf die Länge des ersten Arguments auffüllen soll, und zwar mit Newlines. Vergisst man dies, würde tr nur die Zeichen umwandeln, die im zweiten Argument auch ein Gegenstück haben, und das wären nicht allzuviele (1, um genau zu sein).

Und wenn man dann noch ein -s (single) zu den Optionen hinzufügt, werden Folgen von Newlines zu einem einzigen Newline zusammengezogen. So verhindert man, dass Leerzeilen auftreten und dann auch als "Worte" mitgezählt werden.

[
| Versenden | Drucken ]
  • 0
    Von Jochen am Mo, 14. Februar 2000 um 12:17 #
    Mist! Hier noch mal in schön:

    Hm, schon in Ordnung, aber Verbesserungsmöglichkeiten sind immer da. In der o.a. Lösung ist ein Wort, auf das ein Interpunktionszeichen folgt, ein anderes als eins ohne. Weiterhin gelten Tabulatoren zu den Wörtern dazu, und so Sachen wie eckige Klamern auch. Also sagen wir einfach mal, dass tatsächlich nur reine Wörter interessieren:

    tr -c '[A-Z][a-z]' '[\n*]' | ...

    Durch die Option "-c" wird tr angewiesen, alle Zeichen als erstes Argument zu verwenden, die übrigbleiben, wenn man die tatsächlich aufgeführten vom Zeichensatz abzieht (-c: complement). Also werden alle Zeichen, die nicht zu den Buchstaben gehören, durch Newlines ersetzt. Die Schreibweise des zweiten Arguments bedeutet, das tr diese Zeichenkette auf die Länge des ersten Arguments auffüllen soll, und zwar mit Newlines. Vergisst man dies, würde tr nur die Zeichen umwandeln, die im zweiten Argument auch ein Gegenstück haben, und das wären nicht allzuviele (1, um genau zu sein).

    Und wenn man dann noch ein -s (single) zu den Optionen hinzufügt, werden Folgen von Newlines zu einem einzigen Newline zusammengezogen. So verhindert man, dass Leerzeilen auftreten und dann auch als "Worte" mitgezählt werden.

    Ich hoffe, diesmal sieht's besser aus...

    [
    | Versenden | Drucken ]
    0
    Von Jochen am Mo, 14. Februar 2000 um 12:59 #
    Ich geb's auf...
    [
    | Versenden | Drucken ]
    0
    Von Karsten am Fr, 18. Februar 2000 um 14:33 #
    Erstmal: Recht hast du, die vorgeschlagenen Lösung behandelt nicht alle Sonderfälle. Und Zweitens: Wir haben deinen guten Willen gesehen, auch wenn es mit der Formatierung nicht so hinhaut :).

    Karsten

    [
    | Versenden | Drucken ]
0
Von cld am Fr, 7. April 2000 um 14:54 #
#!/bin/csh

foreach word (`cat datei1`)
echo $word >> datei2
end
echo fertig

echo so long

[
| Versenden | Drucken ]
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten