Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 22.11.2010 - 15:46 Titel: |
|
|
Zitat: | Gut gebrüllt, Löwe! Du hast ja natürlich recht. |
Leider doch nicht, das war etwas zu schnell geschossen. Der Grund ist folgender:
awk behandelt alle seine Argumente als Filenamen. Das bedeutet, dass in dem Fall, wo das awk-Programm nicht nur einen Programmteil für das BEGIN-Pattern enthält, versucht wird, alle Argumente als Files zu öfnen. Das kann natürlich nicht funktionieren. Nur dann, wenn das ganze awk-Programm ausschliesslich den BEGIN-Teil enthält, werden keine Files geöffnet. Deshalb funktionierte auch Dein Beispiel mit der Ausgabe der Argumente im BEGIN-Teil.
Wenn man aber das ganze Programm im BEGIN-Teil unterbringen muss, verschenkt man eine Menge von der awk-Leistungsfähigkeit. Das will ich nicht.
Trotzdem Danke für Deine Beharrlichkeit, die Skripts zu optimieren.
Gruß woodpecker |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 22.11.2010 - 18:47 Titel: |
|
|
woodpecker hat Folgendes geschrieben: |
Gut gebrüllt, Löwe! Du hast ja natürlich recht. Allerdings ist die Sache ja noch viel einfacher, da man immer nur genau ein Argument hat (wegen quoted form of ...).
|
Nö. Man kann so viele haben wie man will. Du könntest z.B. jede Zeile (wenn es denn meherere sind) als Parameter übergeben.
woodpecker hat Folgendes geschrieben: |
Jetzt bleibt allerdings noch die Frage: Was macht quoted form of mit eingebetteten Single Quotes? Werden die SHELL-gerecht behandelt?
|
Natürlich. Aus
Code: | it's a kind of magic |
wird
Code: | 'it'\''s a kind of magic' |
woodpecker hat Folgendes geschrieben: |
Das muss man sich im einzelnen ansehen.
|
Siehe mein Beispiel: "match(text, pattern)"
woodpecker hat Folgendes geschrieben: |
Ähm, sagtest Du, dass Du kein awk beherrscht? |
So ist es. Aber ich kann man pages lesen  _________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 22.11.2010 - 20:53 Titel: |
|
|
Hallo Skeeve,
hast Du mein letztes Posting gelesen?
Also: mit den Kommandozeilenargumenten ist es nicht so das Wahre.
Grund: Siehe oben
Ich benutze jetzt diese beiden Handler
on EOFHereDoc()
set StrEOF to "Das+ist+ein+Text+der+den+EOF+String+fuer+HereDocuments+liefert.Er+kann+beliebig+verlaengert+werden.Aber+Vorsicht+mit+Sonderzeichen"
set EndOfFile to {}
repeat with k from 1 to ((random number from 10 to 15) as integer)
copy some character of StrEOF to end of EndOfFile
end repeat
return EndOfFile as string
end EOFHereDoc
on HereDoc(cmd, filex)
set NL to ASCII character 10
set EndOfFile to my EOFHereDoc()
set cmd to "<<" & EndOfFile & space & cmd & NL & filex & NL & EndOfFile
return cmd
end HereDoc
und rufe dann so auf:
Code: | do shell script HereDoc("awk blabla..",inputfile) |
Das funktioniert bestens. |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 22.11.2010 - 21:08 Titel: |
|
|
woodpecker hat Folgendes geschrieben: | Zitat: | Gut gebrüllt, Löwe! Du hast ja natürlich recht. |
Leider doch nicht, das war etwas zu schnell geschossen. Der Grund ist folgender: |
1. Übergib dir Parameter, wie ich es gemacht habe, mit "-v var=wert"
2. Oder setze ARGC auf 0
3. Oder setze die "verbrauchten" auf ""
Code: |
awk -v v1=test -v v2=wert '{ printf "%s %s %s\n",v1,$0,v2 }' /etc/hostconfig
cat /etc/hostconfig | awk 'BEGIN { v1=ARGV[1]; v2=ARGV[2]; ARGC=0 } { printf "%s %s %s",v1,$0,v2 }' test wert
awk 'BEGIN { v1=ARGV[1]; v2=ARGV[2]; ARGV[1]=""; ARGV[2]=""} { printf "%s %s %s\n",v1,$0,v2 }' test wert /etc/hostconfig
|
_________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Zuletzt bearbeitet von Skeeve am 22.11.2010 - 21:39, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 22.11.2010 - 21:31 Titel: |
|
|
Das Hauptproblem: Ich muss alles im BEGIN-Teil machen. Das ist eine ziemliche Einschränkung. |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 22.11.2010 - 21:38 Titel: |
|
|
woodpecker hat Folgendes geschrieben: | Das Hauptproblem: Ich muss alles im BEGIN-Teil machen. Das ist eine ziemliche Einschränkung. |
1. Quatsch (oder erkläre)
2. Wo ist ein meinem ersten Beispiel (mit -v) ein BEGIN Teil?
3. Auch mit 2. und 3. brauchst Du nicht alles im BEGIN Teil zu machen. Nur die Initialisierung. _________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 22.11.2010 - 22:27 Titel: |
|
|
Zitat: | Wo ist ein meinem ersten Beispiel (mit -v) ein BEGIN Teil? |
Da ist keiner, aber da benutzt Du auch keine Kommandozeilenargumente, die keine Dateinamen sind.
Zitat: | Auch mit 2. und 3. brauchst Du nicht alles im BEGIN Teil zu machen. Nur die Initialisierung. |
Muss ich doch, oder was sollen "test" und "wert" sein? Sobald nicht nur der BEGIN-Teil angegeben ist, versucht awk die als Dateien zu öffnen. Im 2. Beispiel hast Du ja einen Input. Und zwar /etc/hostconfig
Warum Soll ich denn eigentlich unbedingt die Datei in der Kommandozeile unterbringen? Ich hab' doch mit HereDocuments überhaupt kein Problem! |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 22.11.2010 - 23:05 Titel: |
|
|
woodpecker hat Folgendes geschrieben: |
Da ist keiner, aber da benutzt Du auch keine Kommandozeilenargumente, die keine Dateinamen sind.
|
Aber natürlich tue ich das. "-v v1=test" und "-v v2=wert"
woodpecker hat Folgendes geschrieben: |
Zitat: | Auch mit 2. und 3. brauchst Du nicht alles im BEGIN Teil zu machen. Nur die Initialisierung. |
Muss ich doch, oder was sollen "test" und "wert" sein? Sobald nicht nur der BEGIN-Teil angegeben ist, versucht awk die als Dateien zu öffnen.
|
Oh Mann! Entweder Du willst eine Eingabedatei bearbeiten, dann brauchst Du natürlich etwas ausserhalb des BEGIN. Oder du hast keine Eingabe datei, dann braucht's natürlich auch nix ausserhalb. Ich sehe Dein Problem nicht.
woodpecker hat Folgendes geschrieben: |
Warum Soll ich denn eigentlich unbedingt die Datei in der Kommandozeile unterbringen? Ich hab' doch mit HereDocuments überhaupt kein Problem! |
Weil es weniger Probleme bereitet. Glaub's mir einfach
Zudem hast Du einen gewaltigen (jaja - Streite es ruhig ab) Bug in Deinem Script.
Code: | set myText to "$($SHELL -c 'say eekk muhk kighna here documenteh')"
set awk_count_space to "awk '{ n+=gsub(\" \", \" \") } END { print n }'"
do shell script HereDoc(awk_count_space, myText)
|
_________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
woodpecker •--->

Anmeldedatum: 12.10.2010 Beiträge: 150 Wohnort: Roggentin/Rostock
|
Verfasst am: 23.11.2010 - 08:58 Titel: |
|
|
Skeeve hat Folgendes geschrieben: |
Oh Mann! Entweder Du willst eine Eingabedatei bearbeiten, dann brauchst Du natürlich etwas ausserhalb des BEGIN. Oder du hast keine Eingabe datei, dann braucht's natürlich auch nix ausserhalb. Ich sehe Dein Problem nicht.
|
Ja, die will ich immer bearbeiten. Das ist ja gerade mein HereDocument.
Skeeve hat Folgendes geschrieben: |
Weil es weniger Probleme bereitet. Glaub's mir einfach
|
Wo sind denn die Probleme genau? Sehe ich nicht. Im Gegenteil. Ich hab' im HereDocument ja sogar die Möglichkeit Kommando- und Parametersubstitution zu machen. Das kannste bei quoted form of... vergessen. Aus meiner Sicht ist alles bestens.
Ich schreibe z.B. do shell script HereDoc("cat","$(date)
$PATH")
.. und alles wunderbar.
Skeeve hat Folgendes geschrieben: |
Zudem hast Du einen gewaltigen (jaja - Streite es ruhig ab) Bug in Deinem Script.
|
äh.., wo jetzt genau? |
|
Nach oben |
|
 |
Skeeve •---->


Anmeldedatum: 20.04.2006 Beiträge: 1067
|
Verfasst am: 23.11.2010 - 19:28 Titel: |
|
|
woodpecker hat Folgendes geschrieben: |
... und alles wunderbar.
äh.., wo jetzt genau? |
Jaja... It's not a bug, it's a feature.
Vergiß es. Deine Spezifikationen haben nichts über Shellvariablen und Codeausführung gesagt. Im Gegenteil! Du erweckst den Eindruck, daß es hier ausschließlich um TEXT Behandlung geht. Wenn nun plötzlich aber Shellvariablen - die einem AppleScript programmierer gewöhnlich gar nichts sagen - ausgewertet werden, ohne, daß die Dokumentation auch nur im entferntesten darauf hinweist, dann ist das nach allgemeinem Verständnis als BUG zu bezeichnen.
Aber: Mach was Du willst. Ich bin raus. _________________ "All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies") |
|
Nach oben |
|
 |
jiuer7845 •---->

Anmeldedatum: 06.04.2021 Beiträge: 521
|
|
Nach oben |
|
 |
jiuer7845 •---->

Anmeldedatum: 06.04.2021 Beiträge: 521
|
|
Nach oben |
|
 |
jiuer7845 •---->

Anmeldedatum: 06.04.2021 Beiträge: 521
|
|
Nach oben |
|
 |
jiuer7845 •---->

Anmeldedatum: 06.04.2021 Beiträge: 521
|
|
Nach oben |
|
 |
|