Ausgabe von wget formatieren

P

panzaeron

Jungspund
Hallo,

ich möchte in einem Skript die Ausgabe von wget formatieren.
Genau genommen möchte ich aus dieser Ausgabe von wget (wget ftp://xxx.xxx.xxx.xxx/usw.):
Code:
[FONT="Courier New"]--02:50:38-- [url]ftp://xxx.xxx.xxx.xxx/usw[/url].
             => `usw.'
Connecting to xxx.xxx.xxx.xxx:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /usw. ... done.
==> PASV ... done.    ==> RETR usw. ... done.

    [            <=>                     ] 956       125,45K/s

02:50:38 (125,45 KB/s) - `usw.' saved [956]

[/FONT]

nur folgende variable Zeile während des Downloads angezeigt haben:

Code:
[FONT="Courier New"]    [            <=>                     ] 956       125,45K/s[/FONT]

Ich hab schon einiges mit sed probiert, aber dass hat nicht funktioniert, geht das überhaupt?
Und wenn ja, wie müsste ich sowas in meinem Shell-Skript umsetzen?
Bin für jede Hilfe dankbar...
 
Ich würde es mit C und Ncurses machen, denn der <=> Balken bewegt sich ja.
 
Hmm, c ist zu aufwändig und ncurses steht nicht zur Verfügung. Ich hab es mit konstrukten wie diesem versucht:
Code:
[FONT="Courier New"]echo `wget ftp://xxx.xxx.xxx.xxx/usw. | sed -n '|^ \{4\}\[|p`[/FONT]
Aber bin damit nicht erfolgreich gewesen :( Noch einen Tip, eventuell mit awk (wobei ich mich mit awk noch weniger auskenne als mit sed)?
 
Wenn der wget immer die selbe Anzahl der Zeilen hat, dann kannst du ja schon mal mit head die oberen wegschneiden, dann die Zeile, die du brauchst rausschneiden. Dann wenn alles Leerzeichen sind, kansnt du mit cut ja die Feldtrenner setzen und es dann ausgeben.
 
Danke für den Tip, aber das funktioniert leider nicht, ich hab folgendes probiert:
Code:
[FONT="Courier New"]echo `wget ftp://xxx.xxx.xxx.xxx/usw. | head -q -n 9 | tail -q -n 1`[/FONT]
Dadurch sollte eigentlich nur die Zeile mit der Downloadanzeige übrig bleiben, aber leider hat das Konstrukt keinen Einfluss auf die Ausgabe. Irgendwas an der Ausgabe von wget ist anders als sonst. :think: Mn kann die Ausgabe irgendwie nicht auswerten :(
 
Ich denke ich hab eine Lösung.
Das Programm:
Code:
#include <stdio.h>

int main(int argc,int *argv[]){
if (argc<2){
printf("Bitte Dateinamen angeben");
exit(1);
}
FILE *fp;
char *dname=argv[1];
char puffer[2];
int zeigen;
zeigen=0;
fp=fopen(dname,"r");
	while((puffer[0]=fgetc(fp))!=EOF){
		if (puffer[0]=='[')
		zeigen=1;
		if (puffer[0]=='\n'&&zeigen==1)
		break;
		
		if (zeigen)
		printf("%c",puffer[0]);	
	}
printf("\n");

fclose(fp);

	return 0;
}
Macht aus
Code:
--02:50:38-- ftp://xxx.xxx.xxx.xxx/usw.
             => `usw.'
Connecting to xxx.xxx.xxx.xxx:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD /usw. ... done.
==> PASV ... done.    ==> RETR usw. ... done.

    [            <=>                     ] 956       125,45K/s

02:50:38 (125,45 KB/s) - `usw.' saved [956]
das:
Code:
[            <=>                     ] 956       125,45K/s

Das Programm liest die Ausgabe vom Wget aus der datei positionsparameter1 und gibt von der ersten '[' bis zum Zeilenende alles aus.

Kompilier es mit gcc <abgespeichertername> -o <ausgabename>
Bei mir bringt er eine Warnung, funktioniert aber trotzdem. Du musst den Dateinamen als Positionsparameter angeben.
 
@root1992
Vielen Dank für deine Unterstützung :)
Aber so ganz hilfte es mir nicht weiter...
Der Reihe nach, ich habe ein Skript das lädt je nach Benutzereingabe mit wget verschiedene Dateien herunter. Da es auch Anfänger verwenden, möchte ich die Ausgaben auf die eine Zeile reduzieren, damit der Benutzer sieht wieviel noch zu laden ist und das er auch tatsächlich noch lädt und nicht abgestürtzt ist.

Wenn ich dich richtig verstanden habe, muss ich die Ausgaben von wget in eine Dateiumlenken und kann dann mit deinem Programm die Ausgabe formatiert ausgeben. Problem ist, ich bekomme die Ausgabe nicht in eine Datei. Die Umlenkung mit wget ftp://xxx.xxx.xxx.xxx/usw. > ausgabe.txt funktioniert nicht. ?(

Edit:
Das Kompilieren hat übrigens gut funktioniert :)

Kannst du mir noch ein wenig auf die Sprünge helfen, wie ich dein Tool einbinden kann?
 
Kann man den Wget nicht direkt sagen, er solls in ne Datei schreiben, aber du wirst ein Problem haben, denn es ändert sich ja ständig. D.H. wenn er fertig ist, kannst du erst [ <=> ] ... ausgeben lassen, aber ich denke da ist es schon zuspät.
 
Hallo

Du kannst nicht mit Shellmitteln die Ausgabe von wget filtern.
Wenn du die Ausgabe von wget ändern willst, dann musst du dies im Quelltext von wget tun.
sed und co erwarten aber ein EOF in der Pipe, der natürlich erst am Ende von wget kommt.
Ähnliche Problematik hättest du mit top (ohne Option b).
Gruß Wolfgang
 
Und das <=> bewegt sich doch, dass kann man meineswissens nicht mit der Shell machen, nur mit ncurses (meines Wissens, vll gibt es ja eine andere Möglichkeit)
 
Danke für die Antworten :)

Ich werde wohl auf ncftpget umsteigen, schmale Ausgabe, alle wichtigen Infos in einer Zeile...

Nochmal besonderen Dank an root1992 für deine Arbeit.
 
Kein Problem panzaeron wir sind hier eine große Familie :) jeder hilft wo er kann.
 

Ähnliche Themen

Probleme bei Gnome Installation

Pure-ftpd mit Postgre

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

ATI-fglrx unter Ubuntu Hardy - Logoff Issue

CGI laesst sich nicht ausfuehren

Zurück
Oben