Hallo zusammen. Ich hab ein kleines Problem mit dem UNIX-Standardprogramm uniq. Wie kann ich ein 2-dimensionales Array diesem Befehl übergeben und es auf der Standartausgabe ausgeben? Das Array besteht aus unterschiedlich langen Strings. Ich hoffe, dass mir einer da helfen kann. Danke schon einmal im voraus. Lg Stefan
Da kann dir keiner helfen, es gibt nämlich keine Standartausgabe und uniq kann nur mit Textzeilen umgehen und nicht mit Feldern.
Bzw erklär mal was genau dein Problem ist, ich habe nämlich nicht genau verstanden was du genau machen willst.
Ich hab ein Programm schreiben müssen, dass zwei Befehle z.B. "seq 0 2 10" "seq 0 3 10" einliest, mithilfe von fork() bearbeitet und die jeweiligen Zeilen sollen dann verglichen, mit qsort sortiert und mit uniq -d ausgegeben werden. Jetzt hab ich mir einmal das zwischenergebnis in ein 2-dimensionales Array gespeichert. qsort hab ich bereits angewandt und jetzt hab ich nur mehr das problem mit uniq -d. Hoffe die Beschreibung ist verständlich. Lg Stefan
nachdem seq und uniq Kommandos sind, qsort dagegen eine C-Funktion, frage ich mal sicherheitshalber, ob du wirklich qsort nehmen sollst und nicht sort?
Klaus Wachtler schrieb: > nachdem seq und uniq Kommandos sind seq ist nichtmal das, sondern GNU coreutils, also praktisch Linux-only. BSD hat dafür das Kommando jot (das umfangreicher als seq ist), Standard-UNIX hat nichts dergleichen (müsste man mit awk emulieren).
Das mit qsort funktioniert so weit und das passt auch. Da ich jetzt kein Array übergeben kann, hab ich mir die Ausgabe einmal in ein outputfile geschrieben. Die Datei müsst ich doch jetzt in meinem Programm an uniq -d übergeben können oder? In der Konsole selbst ist das ja auch möglich mit:
1 | uniq -d < outputfile |
Aber wie mach ich das?
1 | execl("/usr/bin/uniq", "uniq", "-d", (char *)0); |
Wie sag ich ihm jetzt noch zusätzlich, dass er aus dieser Datei lesen soll?
Am einfachsten mit system statt execl, da kann man in der Kommandozeile die Eingabe umleiten.
Ich glaub aber, dass ich exec verwenden muss. Außerdem hab ich dann ja wieder das Problem, dass ich das in der Kommandozeile umleiten muss oder? Ich soll es ja direkt in meinem Programm machen!
stefan schrieb: > Ich glaub aber, dass ich exec verwenden muss. Dann schlag dich mit dup2() und Konsorten 'rum. Am besten, du guckst dir mal an, wie system(3) implementiert ist. Ist ja nun kein Geheimnis. Alles halt ziemlich low-level Unix.
stefan schrieb: > Aber wie mach ich das? > execl("/usr/bin/uniq", "uniq", "-d", (char *)0); > Wie sag ich ihm jetzt noch zusätzlich, dass er aus dieser Datei lesen > soll? Indem du ihren Namen auch übergibst?
Es gibt den Parameter -f sowie den -s für sowas, wie auch noch andere Hilfsprogramme, welche dir die Tabellen aussortieren. Probier mal den befehl man uniq oder such im web nach "man uniq" .
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.