Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Handler zur Textanalyse und -verarbeitung
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 22.11.2010 - 15:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 22.11.2010 - 18:47    Titel: Antworten mit Zitat

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 Wink
_________________
"All problems are solved in slightly less than half an hour" (Chumbawamba, "Hey Hey We're The Junkies")
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 22.11.2010 - 20:53    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 22.11.2010 - 21:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 22.11.2010 - 21:31    Titel: Antworten mit Zitat

Das Hauptproblem: Ich muss alles im BEGIN-Teil machen. Das ist eine ziemliche Einschränkung.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 22.11.2010 - 21:38    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 22.11.2010 - 22:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 22.11.2010 - 23:05    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden
woodpecker
•--->
•--->


Anmeldedatum: 12.10.2010
Beiträge: 150
Wohnort: Roggentin/Rostock

BeitragVerfasst am: 23.11.2010 - 08:58    Titel: Antworten mit Zitat

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 Wink

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Skeeve
•---->
•---->


Anmeldedatum: 20.04.2006
Beiträge: 1068

BeitragVerfasst am: 23.11.2010 - 19:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Fischer-Bayern.de Foren-Übersicht -> OS X-Snippets Alle Zeiten sind GMT + 2 Stunden
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter