• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

do shell script "sort" schaff ich nicht

Goar

Gast
Hallo zusammen,

vor ein paar Tagen bin ich auf "do shell script" gestoßen und versuche jetzt an einigen Beispielen die Syntax aus.

Den Befehlsübersichten zufolge, dich ich bisher durchforstet habe, müsste mein Skript funktionieren:
---
set sortTest to do shell script "sort -n " & POSIX path of fullSortPath
---
Ich bekomme aber den Dateiinhalt (unsortierte, 5- oder 6stellige Zahlen, return-getrennt) unverändert zurück.
Ebenfalls bei diesem Versuch:
---
do shell script "cd " & sortPath & "; sort -nr " & POSIX path of sortFile
---

Mache ich da etwas falsch oder irgendwo etwas um-/einstellen, damit es klappt?
iMac G5, OS 10.4.4

Über eine allgemein verständliche Antwort würde ich mich freuen.

Gruß, Goar
 
  • Like
Reaktionen: 1 Person

Daisy

Uelzener Rambour
Registriert
14.01.06
Beiträge
366
Moin,

ich denke, der erste Hinweis von Pete trifft (das return/lf - problem). Ich bin da auch schon öfter mal mit 'grep'-Versuchen o.ä. bei Mac-Textfiles reingedopst ;)
Noch ein Tipp (wurde im Forum auch schon öfter mal erwähnt): Um Probleme mit Leer- oder Sonderzeichen in den POSIX-paths zu vermeiden, solltest du hier immer wenn's geht 'quoted form of' verwenden. Das Script könnte also so funktionieren (ungetestet):

Code:
do shell script "cat " & quoted form of (POSIX path of fullSortPath) & " | perl -pe 's/\r/\n/g' | sort -n"

Grüße,

Daisy
 
  • Like
Reaktionen: 1 Person

Goar

Gast
Moin moin,

zunächst mal vielen Dank für Eure umfangreiche Hilfe.
Am Anfang fehlts doch an allen Ecken, alles Sachen, über die man nach einiger Übung wohl gar nicht mehr nachdenkt.
Mit pete's erstem Hinweis return/lf war der Knoten durchgeschlagen. Ich hatte es zwar schon auf Apples Developer-Seite gelesen, aber wohl nicht ganz für ernst genommen.

Zitat von pete
do shell script wandelt in den Rückgabewerten von Unix-Kommandos automatisch die Zeilenendungen, wenn man es nicht anders angibt.
Auch das hatte ich auf der Developer-Seite (glaub' ich) gelesen. Bei meinem ersten Versuch mit lf habe ich das Ergebnis allerdings in eine Datei gesichert und da wurden die lf nicht in return umgewandelt; deshalb habe ich dafür noch einmal tr bemüht. Eben habe ich das Ergebnis direkt nach dem sort in eine Variable gespeichert und da wird lf tatsächlich in return gewandelt.

@ pete
Was Pfade und Dateinamen angeht, waren meine ersten Versuche daneben. Beim Ersten war die Absicht, den Pfad incl. Dateinamen in der Variablen zu haben, im zweiten Versuch sollte nur der Dateiname in der Variablen stehen, daher der vorhergehende Wechsel des Verzeichnisses, aber eben nicht "ganz richtig".

Im Terminal sah die Zeile dann etwa so aus (und es klappte, juchu):
Code:
cd /zum/Zielordner/wechseln; tr "\r" "\n" < ArtNr117.txt | sort -n | tr "\n" "\r" > ArtNr117_sort
Da der Skripteditor die returns und lf leider in ihre Ausführung übersetzt (das gilt auch für die Perl-Passage), habe ich es vorgezogen diese Elemente auszuschreiben, weshalb meine Skriptzeile so aussieht:

Code:
-- mit cd und sichern in Datei
do shell script "cd " & quoted form of (POSIX path of savepath) & "; tr \"" & return & "\" \"" & (ASCII character 10) & "\" < " & sourceFile & " | sort -n > & targetFile
-- alternativ mit cat und speichern in Variable
set allText to do shell script "cat " & quoted form of (POSIX path of fullSavePath) & " | tr \"" & return & "\" \"" & (ASCII character 10) & "\" | sort -n"

Gibts da jetzt - unter Berücksichtigung meines Anfängerlevels - noch etwas zu verbessern? Jedenfalls ist es rattenschnell, mit bloßem Auge konnte ich den Unterschied zwischen einer 2tausend- und einer 117tausendzeiligen Testdatei nicht wirklich feststellen.

@ Daisy
Perl mit in AS einzubinden ist für mich ein ziemlich neuer Hinweis. Meine Reaktionszeiten sind da zwar etwas länger, zumal ich gerade mit Shell angefangen habe, aber so richtig hoffnungslos bin ich nicht.

Gruß, Goar