Forum: PC-Programmierung UNIX-Standardprogramm uniq -d


von stefan (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

Da kann dir keiner helfen, es gibt nämlich keine Standartausgabe und 
uniq kann nur mit Textzeilen umgehen und nicht mit Feldern.

von dall (Gast)


Lesenswert?

Bzw erklär mal was genau dein Problem ist, ich habe nämlich nicht genau 
verstanden was du genau machen willst.

von stefan (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

nachdem seq und uniq Kommandos sind, qsort dagegen eine C-Funktion, 
frage ich mal sicherheitshalber, ob du wirklich qsort nehmen sollst und 
nicht sort?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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).

von stefan (Gast)


Lesenswert?

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

von Klaus W. (mfgkw)


Lesenswert?

ja, warum nicht?

von stefan (Gast)


Lesenswert?

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?

von Klaus W. (mfgkw)


Lesenswert?

Am einfachsten mit system statt execl, da kann man in der Kommandozeile 
die Eingabe umleiten.

von stefan (Gast)


Lesenswert?

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!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Rolf Magnus (Gast)


Lesenswert?

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?

von Chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.