Konsole - awk - Frage
Konsole - awk - Frage
Hallo. Ich habe eine lange Textdatei und benötige alle Wörter in denen der String "xy" vorkommt, OHNE doppelnennung.
Wie kann ich das realisieren?
Vielen Dank
Wie kann ich das realisieren?
Vielen Dank
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Hi,
folgendes awk-Script gibt dir alle Woerter aus die den String xy enthalten:
Wie Savar schon geschrieben hat kannst du "unique" bzw. "sort -u" verwenden, um aus diesem Output die Doubletten zu entfernen. Meine zusaetzlichen Ausgaben solltest du natuerlich entfernen, sonst wird's nix
folgendes awk-Script gibt dir alle Woerter aus die den String xy enthalten:
Code: Alles auswählen
nawk '
{
for(wort=1;wort<=NF;wort++){
if($wort ~ "xy")
print "Gefunden, Zeile = " NR ", wort = "$wort
}
}'
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Rolis Script so angepasst, das jedes Wort nur einmal ausgegeben wird:(Statt nawk geht natürlich auch gawk oder awk)
Code: Alles auswählen
nawk '
{
for(wort=1;wort<=NF;wort++){
if($wort ~ "xy")
wordlist[$wort] = 42;
}
}
END {
for (w in wordlist)
print w;
}' < DATEI
Hi Joghurt,
Ich sitze dann jedesmal total perplex da wenn irgendwas nicht funktioniert, bis ich wieder daran denke, "schau doch mal nach" was du hier eigentlich benutzt.
<edit>Einen habe ich noch:
Welche Loesung ist eigentlich schneller? Aus dem Bauch heraus wuerde ich auf meine in Kombination mit uniq tippen, wobei das mit Sicherheit auch von der Groesse der Inputdatei abhaengt. Vielleicht kannst du mohameth da ja was zu sagen, bezogen auf dein Problem.
Awk ist ein Klasse Tool, keine Frage, ich nutze es auch sehr oft, aber was schneller koennt's doch sein</edit>
So pauschal wuerde ich das nicht unterschreiben. Ich sitze immer wieder vor Kisten (derzeit einem Solaris) bei denen awk ein Link ist, leider aber auf oawk.Joghurt hat geschrieben:(Statt nawk geht natürlich auch gawk oder awk)
Ich sitze dann jedesmal total perplex da wenn irgendwas nicht funktioniert, bis ich wieder daran denke, "schau doch mal nach" was du hier eigentlich benutzt.
<edit>Einen habe ich noch:
Welche Loesung ist eigentlich schneller? Aus dem Bauch heraus wuerde ich auf meine in Kombination mit uniq tippen, wobei das mit Sicherheit auch von der Groesse der Inputdatei abhaengt. Vielleicht kannst du mohameth da ja was zu sagen, bezogen auf dein Problem.
Awk ist ein Klasse Tool, keine Frage, ich nutze es auch sehr oft, aber was schneller koennt's doch sein</edit>
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Vielen Dank für die Lösungen! Einen Geschwindigkeitsunterschied konnte ich nicht feststellen, soo groß ist meine Datei dann auch wieder nicht.
Konkret ging es darum, ungewollte Ligaturen aus einem Tex-File herrauszufinden um sie dann zu unterdrücken.
Konkret ging es darum, ungewollte Ligaturen aus einem Tex-File herrauszufinden um sie dann zu unterdrücken.
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Hi,
wenn es sich nicht gerade um Giga/Megabyte handelt, und die Operation wie hier, doch recht simpel ist, ist der Unterschied wahrscheinlich relativ gering. Messen koenntest du das ganze z.B. indem du mal den Befehl "time" vor den awk-Aufruf von Joghurt, bzw. meine awk-uniq "Tool Chain" setzt. Wenn du jetzt noch die Dateigroesse, und den Output von "wc deine_Datei" hier Posten wuerdest, haette man mal einen Anhaltspunkt was schneller ist.
wenn es sich nicht gerade um Giga/Megabyte handelt, und die Operation wie hier, doch recht simpel ist, ist der Unterschied wahrscheinlich relativ gering. Messen koenntest du das ganze z.B. indem du mal den Befehl "time" vor den awk-Aufruf von Joghurt, bzw. meine awk-uniq "Tool Chain" setzt. Wenn du jetzt noch die Dateigroesse, und den Output von "wc deine_Datei" hier Posten wuerdest, haette man mal einen Anhaltspunkt was schneller ist.
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Code: Alles auswählen
fabske@uoi-01:/mnt/dateien.uoi-01/fabske$ wc DATEI
738 3164 26416 DATEI
fabske@uoi-01:/mnt/dateien.uoi-01/fabske$ time ./roli
...
real 0m0.028s
user 0m0.004s
sys 0m0.005s
fabske@uoi-01:/mnt/dateien.uoi-01/fabske$ time ./jog
...
real 0m0.028s
user 0m0.006s
sys 0m0.002s
fabske@uoi-01:/mnt/dateien.uoi-01/fabske$
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Das hängt davon ab, wie in der jeweiligen awk-Version die Arrays implementiert sind. Ob als Hashmap oder als Suchbaum etc. Ich würde spontan vermuten, dass es von der Anzahl der Treffer abhängt; schließlich muss bei deiner Lösung zum Schluss noch sortiert werden.roli hat geschrieben:Welche Loesung ist eigentlich schneller?
Und in der Tat. Ich hab mal beide auf die Bibel losgelassen, und einmal nach Wörtern, die ein "e" enthalten gesucht, und einmal nach "exxy" (wo es keine Treffer geben wird)
Code: Alles auswählen
$ wc -w bible
1072268 bible
$ # 'e' suchen, 31.428 Treffer
$ time ./jog.sh > /dev/null
real 0m1.615s
user 0m1.365s
sys 0m0.012s
$ time ./roli.sh > /dev/null
real 0m9.253s
user 0m8.947s
sys 0m0.042s
$ # 'exxy' suchen, 0 Treffer
$ time ./jog.sh > /dev/null
real 0m1.390s
user 0m1.141s
sys 0m0.009s
$ time ./roli.sh > /dev/null
real 0m1.390s
user 0m1.130s
sys 0m0.012s
(Und natürlich davon, ob man Mittwoch abens nichts besseres zu tun hat, als einen sinnlosen Benchmark zu machen)
Wow, Danke ihr 2,
damit haette ich echt nicht gerechnet, ich bin immer davon ausgegangen, das awk die Bremse war, wenn grosse Shell-Scripte (mit awk drinnen), langsam liefen.
Wieder was dazugelernt
damit haette ich echt nicht gerechnet, ich bin immer davon ausgegangen, das awk die Bremse war, wenn grosse Shell-Scripte (mit awk drinnen), langsam liefen.
Wieder was dazugelernt
Roland
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"
Dann hat ja nun jeder was davon
Danke nochmal.
Danke nochmal.
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?