• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Textstellen von Datei in andere kopieren mit Cronjobs ?

Hallo,

habe ein kleines problem, tüfftel schon seit tagen an der lösung bisher ohne erfolg.
Vielleicht kann mir ja hier jemand nen heißen tipp geben :?: .

Hab ne DSL Flat ohne feste IP, ein Cronjob sendet stündlich eine HTML datei, gewonnen aus netstat > text.html oder ifconfig > text.html, an meinen server. Dient dazu das ich mich jederzeit via VNC einwählen kann, das geht soweit auch alles es wird mir nur zu umständlich jedesmal die IP aus ner textdatei rauszukopieren, darum wollte ich ein cronjob schreiben der aus der obigen ausgabe die IP adresse (ist immer an der selben stelle im text bei ifconfig) in eine vorgefertigte HTML datei einfügt und mir das einloggen via vnc optisch zu verschönern, bzw. vereinfachen! Hab schon mit vielen programmen probiert aber ich glaube hier stoßen selbst vi und emacs an ihre grenzen oder?

Vielen Dank im vorraus

MFG Buntersalamander :D
 
Hi,

die IP kannst mit awk auslesen ...
das in eine Variable schicken, welche dann im HTML-Dokument eingetragen wird.

:roll: das war jetzt mal so auf die Schnelle gedacht
 
Danke erst mal für die schnellen Antworten,

hab mal mein glück mit awk probiert, sieht auch alles sehr vielversprechend aus.
Nun der Haken Awk unterteilt eine Eingangsdatei in spalten und zeilen ähnlich einer Tabelle, soweit so gut aaabbbeeerrr die Spalten werden durch Leerzeichen oder Kommas getrennt, mein Problem ist hierbei das die Ausgabe leider so ausschaut:

IP Adresse:83.564.465.52

wenn ich mir das rausfiltere komme ich zwar den Teil einzeln heraus allerdings nur mit Adresse: vorn dran

Adresse:83.564.465.52

Wenn ich das noch weg bekommen würde wäre das perfekt, hatte gestern nacht aber auch noch nicht allzu viel zeit um mich des Problemes anzunehmen.
Weiß jemand ob man bei Awk auch nach Zeile und Schriftzeichen suchen kann? z.B. 4 Zeile / Zeichen 17 bis 28`? :oops:

Den 2.ten Tip werde ich heute abend auch kleich mal versuchen ob ich mir da was zu nutze machen kann, hab das ganze schon mal überflogen hab aber noch keine bessere möglichkeit erkennen können um die IP auszulesen.

Ich teste mal alles ausgiebig, und gebe dann mein Bericht ab!

Danke noch mal für die mühen :idea:
 
Hallo noch mal,

ich habe da noch so meine Probleme mit den Befehl´s Syntaks.

Der Befehl

`awk '{printf($4,17,12)}' /der/Pfad/zum/File `

sieht gut aus aber awk pickt durch $4 nicht die vierte Zeile sondern wieder die viert Spalte aus dem Text heraus, damit habe ich wieder

Adresse:83.564.654.45

als ergebnis.

Den link hab ich auch mal Probiert, da ist ein script was super wäre, das bekomm ich aber nicht zum laufen
Hier das Script:


#!/bin/bash

# Aktuelle IP-Adresse der ISDN-Karte auslesen und in
# eine HTML-Datei schreiben

cat << EOF > /tmp/tmpfile
<HTML>
<HEAD>
</HEAD>
<BODY>

<P>
`date`
</P>

<P>
IP: `ifconfig | sed -n /P-t-P/p | cut -d: -f 2 | cut -d\ -f1`
</P>
<P>
P-t-P: `ifconfig | sed -n /P-t-P/p | cut -d: -f 3 | cut -d\ -f1`
</P>

</BODY>
</HTML>
EOF

# Diese Seite nach www.yourdomain.de kopieren
echo "Datei wird hochgeladen ..."
ftp -u ftp://username:passwort@www.yourdomain.de/ipnummer.html /tmp/tmpfile


und hier das Problem:

durch den Aufruf "cat << EOF > /tmp/tmpfile"
wechselt die Konsole von dem Eingabe modus in die Eingabe ebene des Programmes cat (oder EOF), dieses kann ich aber dann nicht mit den weiteren befehlen aus einem script heraus steuern, daher passiert nichts.
Das script stück für stück in der Konsole abgetippt würde funktionieren, als script verweigert es jedoch seinen dienst!

:roll: Langsam nicht mehr weiter weiß :roll:

Vielen Dank wie immer im vorraus,

MFG Buntersalamander
 
Also...

$4 bedeutet das 4. Feld der aktuellen Eingabezeile. Da kommt es darauf an, was in der Variable FS (Field seperator) steht, standardmäßig wird wohl das Leerzeichen bzw. TAB herangezogen.

Wenn Du fix die 4. Zeile haben willst, must Du in der Variablen FNR nachgucken, diese enthält die Nummer der laufenden Zeile.

`awk '/FNR==4/{print}' /der/Pfad/zum/File `

oder kürzer:
`awk '/FNR==4/' /der/Pfad/zum/File `

Wenn Du feststellen willst, ob am Anfang Deiner Eingabezeile der Ausdruck "Adresse:" steht, würde ich das über einen regulären Ausdruck machen:

`awk '/^Adresse/' /der/Pfad/zum/File `

druckt die Zeile, die mit "Adresse" beginnt.

Wenn Du aus dieser Zeile etwas herausfiltern willst, musst Du noch einen Aktionsblock unterbringen (den hattest du ja ursprünglich)
Code:
`awk '/^Adresse/{print substr($0,p,l)}' /der/Pfad/zum/File `
wobei substr aus der ganzen aktuellen Zeile ($0) ab der Position p in der Länge l den Teilstring an die print-Funktion zurückgibt.
 
Und wenn Dich der awk interessiert, und der ist enorm leistungsfähig, kannst Du hier noch mehr nachlesen:

http://www.linuxfibel.de/awk.htm
 
Endlich hab ich den Durchblick, hab mir die Site erst mal ausgedruckt (immerhin 27 Seiten) und in ruhe durchgelesen, ne Stunde getüffelt und Gebastelt und siehe da es klappt.
Den Weg zum Ergebniss kann ich sicher noch vereinfachen, aber die funktion ist mir im moment wichtiger :lol:. Und ich habe wieder was gelernt!!! Danke an alle die geantwortet haben und falls jemand wissen möchte wie das vorläufige ergebniss aussieht
Bitte sehr
Code:
ifconfig | awk -F '.' '$1 ~ /inet Adresse:8/ {print $1"."$2"."$3"."$4}'| awk -F ':' '{print $2}' | awk '{print "IP          "$1" "}' > /root/bin/cronjob/tmp/statlone
 
gehts no a bissarl komplizierter?

zuerst machst dein awk
do is des resultat adresse:1234132541354
dann machst einfach ein

wosaimmer|awk '{print $4}'|cut -c "9-100"
 
:lol: :D

Hat mein script wirklich gut kleiner Gemacht, aber ich fange erst an mit der Automatisierung meines Linux, da warten noch viele kleine Probleme....
 
Oben