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

Zeile für Zeile

iea

Member
Hi,

also folgendes:

ich habe eine Datei mit Einträgen so z.B:

12345
23451
45623
62544
12345


es können auch doppelte Einträge vorhanden sein die ich aber ignorieren möchte.

Ich möchte jetzt jeden Eintrag auslesen(keine doppelten Einträge) und eine bereits vorhandene Datei mit z.b. cp kopieren und gleichzeitig in den Wert umbennen

Also z.B.:

cp vorhanden.bsp wert1.bsp
cp vorhanden.bsp wert2.bsp
cp vorhanden.bsp wert3.bsp

gleichzeitig muss ein Wert in der Datei durch den neuen ersetzt werden :D

Habs net hinbekommen :(

kann mir jemadn helfen... wäre super

Gruß

iea
 

oc2pus

Ultimate Guru
dann schau dir das mal an:
http://www.linux-club.de/ftopic63799.html

mit ein wenig Phantasie kannst du dir das umbauen ...

siehe "man sort" um die Duplikate zu eliminieren

Ich erwarte dann deine ersten Vorschläge und dann sehen wir weiter ... OK?
 
OP
iea

iea

Member
Den Ansatz habe ich schon

#!/bin/bash

cat /etc/werte | while
read line
do
cp /vorlage /usr/bin/$line
done

Nur wie kann ich doppelte ausschliessen und noch einen bestimmten Wert(WORT) in der Datei durch den Wert &line ersetzen ?

Danke erstmal für die Antwort gucks mir direkt mal an

MFG
iea
 
OP
iea

iea

Member
Hi danke funktioniert eigentlihch :D

#!/bin/bash

sed 's/:/./g' </etc/file> /etc/file2.conf

cat -u /etc/file2 | while

read line
do
cp /root/hallo /root/$line
sed 's/wert1/neuwert/g' </root/$line> /root/$line2.conf

done


Nur noch eine FRage besteht denn jetzt die Mögclihkeit den umweg über eine weitere Datei zu sparen ?

Hab nichts geunden ???

THX aber schonmal
 

oc2pus

Ultimate Guru
ich denke du hast etwas gelernt ... fein gemacht !

zu deiner Frage:
Code:
sed 's/:/./g' </etc/file> /etc/file2.conf
cat -u /etc/file2 | while ...

das könntest du in eine pipe schreiben, d.h. das um ":" bereinigte temp-File könnte durch den "sort -u" laufen und dann in das while.

evtl auch mal die Reihenfolge umstellen:
sortieren - unique - konvertieren - bearbeiten

und statt sed ist dann der awk besser geeignet um Ersetzungen vorzunehmen.

jetzt da du eine Lösung hast, kannst du ja in aller Ruhe etwas rumspielen. Und poste deine fertige Lösung hier! Die Script-Gurus werden dann schon noch was optimieren :)
 
OP
iea

iea

Member
Ok soweits klappt es ... kannst du mir noch kurz ne Möglichkeit nennen wie ich z.B. zeichen 3und4 oder 5und6 auslesen kann ???

Habe eine Datei mit der Mac Adresse muss jezt die ersetn beiden dan die anderen beiden... usw. auslesen ohne die doppelpunkte und einzelnd.
 

oc2pus

Ultimate Guru
Beispiel:
Code:
echo "00:13:02:50:3A:CC" | awk -F":" '{print $1"-"$2"-"$3"-"$4"-"$5"-"$6}

-F"x" Definition des Trennzeichens
-F":" es wird am ":" geparst
 
OP
iea

iea

Member
Hi,

danke nochmal. Jetzt habe ich ein script das mir aus der messages, die aktuellen MAC - Adressen der Clients in eine Datei speichert.

Jetzt müsste das ganze in Echtzeit laufen lassen, ich hab das mal in eine While schleife gepackt und danach eine CPU Auslastung von 88% :D gehabt, net so toll.


Gibt es ne möglichkeit das script dauernd laufen zu lassen, ohne CPU auslastung oder die andere Mögclihkeit, das SCRIPT erst zu starten wenn der DHCP Server ein request bekommt. BZW: ein neuer eintrag in der messages ist?

Danke

iea
 

oc2pus

Ultimate Guru
ok, also dann zum nächsten Schritt:
Code:
while condition; do
    Befehl(e)
    sleep 10  (10 sekunden warten)
done
das wäre eine Möglichkeit, alle 10 Sekunden nachzuprüfen.

Anonsten wüsste ich jetzt adhoc nicht wie man auf script-Ebene ein vernünftiges Polling hinbekommt. Da wäre dann perl oder python besser geeignet.

Im Prinzip müsstest du auf ein Ereignis oder eine Datei-Änderung lauern mit einem daemon, der dann, wenn das Ereignis eintritt etwas "unternimmt".

Bzw, erzähle doch mal was du eigentlich genau vor hast, evtl gibt es dazu ja schon eine Lösung :mrgreen:

Und bitte sei so nett und eröffne dann beim Umstieg auf perl/python einen neuen Thread :)
 
OP
iea

iea

Member
Folgendes :

Ich möchte über PXE booten und die autoinst.xml direk mit angeben.

Der Client starten bekommt vom Server eine DHCP adresse
in diesem moment habe ich die MAC ermittelt
und eine mac:mac:...cfg in dem Ordner pxelinux.cfg erstellt
in dieser datei ist auch mit autoyast=nfs..blabla.../mac:mac.xml angegeben.

Funktioniert wunderbar es würde sogra mit einem sleep 5 funktionieren immerhin muss er zwischen der DHCP anfrage und dem PXE LOAD alles erledigt haben ....

Wie könnte ich das denn als Deamon starten habs schonmal versucht hat auch funktioniert bis ich es in den Bootvorgang eingebaut habe da hat er sich aufgehangen.


P.S.: Perl kann ich nicht so gut
 

oc2pus

Ultimate Guru
ok, das heisst du brauchst das script nur beim booten um die Parameter zu ermitteln etc.

dann kannst du das als runlevel-script erledigen. Siehe dazu mein HowTo in der FAQ-Sektion:
[Allgemein] runlevel scripte - Scripts selber erstellen
http://www.linux-club.de/viewtopic.php?t=16069

und in der Required-Start Sektion musst du dafür sorgen, das dein script erst auf Netzwerk, DHCP, named, .. wartet und dann ausgeführt wird.
 
OP
iea

iea

Member
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Würde das bedueten das mein Script beim booten gestartet wird aber erst ausgeführt wird wenn ein dhcp kommt? oder das mein script gestartet wird wenn dhcp-server gestartet wird?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Ich hab das script als runl.script mit einer while schleife slle 5 das funktioniert aber net?
 

oc2pus

Ultimate Guru
das letzere, also dein script startet nach dem dhcp.

Natürlich nur wenn du es richtig als runlevel-script eingebunden hast :)
 
OP
iea

iea

Member
Aber genau das will ich ja nicht ...

möchte das script am besten nur laufen lassen wenn ein dhcp request kommt.

Wöre sowas einfacher oder mit perl überhaupt möglich
 

oc2pus

Ultimate Guru
ok, dann starte das script in /etc/boot.local.

das script sollte eine Schleife enthalten und ein sleep 10. Damit wird alle 10 sekunden geprüft. Wichtig: der Aufruf aus der /etc/boot.local muss so aussehen:
Code:
/pfad/zu/deinem/script/deinscriptname &
ohne das "&" am Ende blockierst du die ganze Kiste !

ja ich denke das geht mit Perl und/oder Python ziemlich gut. Du kannst dir auch ein C-Programm schreiben mit der gleichen Funktionalität. It's up to you :)
 
OP
iea

iea

Member
Hi danke erstmal habe aber gerade eine andere Mögclihkeit gesehen :D

Werde einfach logsurfer auf die messages jagen und die DHCPACK auslesen und dann das script starten

'dhcpd: DHCPACK on' --- 0 exec "/bin/script $0 "

Kann ich in dem einzeiler jetzt nur den heutigen tag rausfiltern ?


so haut er mir immer die ganze messages durch und da sind einige dhcp requests?

Danke
 
Oben