"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.
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.
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.
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 :).
was macht denn "uniq -c" ?
cu
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.
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...
Karsten
foreach word (`cat datei1`)
echo $word >> datei2
end
echo fertig
echo so long