diff

P

pseiko

Jungspund
hiho leute !

mal wieder was zum skripten von mir.

aufgabe:
- 2 files miteinander vergleichen (ist ja prinzipiell nicht so schwer ;) )
- beide files enthalten inhalt vom format: service servername - passwort
- jetzt muss ich die einträge mit serverliste.alt mit serverliste.neu vergleichen
- die neuen passwörter die in serverliste.neu vorkommen sollen dann in der alten überschrieben werden. um es zu verdeutlichen:

serverliste.alt
service1 servername1 - passwort1

diff

serverliste.neu
service2 servername2 - password2

ergebnis:
serverliste.alt
service1 servername1 - password2

weiters erschwert wird das dadurch das die passwörter aus div. zeichene (also zahlen, buchstaben,usw.) bestehen und das ganze sollte dann in serverliste.alt sortiert (also alphabetisch) aufscheinen.

die theorie ist ja immer so einfach, aber die praxis :(
für jede erdenkliche hilfe bin ich sehr dankbar...aber bitte....nicht nur so posts wie "man diff" denn 1. hab ich die bereits gelesen und 2. hab ichs nicht so ganz mit dem logisch denke in der unix-shell welt :D
 
Ähm, in welchem Zusammenhang stehen die beiden Zeilen aus serverliste.alt und serverliste.neu? Deine serverliste.neu müßte wohl so aussehen:

service1 servername1 - password2

Für diesen Fall müßte folgendes funktionieren:

Code:
sed -n 's/ -//p' serverliste.neu | while read serv name pass; do sed "s/\($serv $name - \).*/\1$pass/" serverliste.alt; done
 
Zuletzt bearbeitet:
wie meinst du in welchen zusammenhang? bei enthalten servernamen, beide enthalten passwörter.
also genauer eigentlich root@servername TAB passwort
deine variante hab ich als skript versucht auszuführen aber irgendwie ist da kein output am screen zu sehen ?(

um noch präziser zu sein (wobei ich ja auch vorher nicht ganz korrekt war)

serverliste.alt enthält:
Code:
service servername

serverliste.neu enthält:
Code:
root@servername TAB passwort

nun sollen die beiden files zusammengeführt werden

also dann serverliste.ganz:
Code:
service TAB servername TAB root@servername TAB passwort

natürlich müssen die zeilen übereinstimmen, also das service kann nicht bei einem servernamen stehen der überhaupt nix mit dem service zu tun hat weil es unterschiedliche services sind

mom. sieht das skript welches ich mir anfertigen hab lassen so aus:
Code:
#!/usr/bin/sh
cat serverliste.alt | while read x
do
        set $x
        pw_eintrag=`grep $2 serverliste.neu`
        printf "%-25s\t%-25s\t%-5s\n" "$1" "$2" "$pw_eintrag"
done


so kommt ja schon das richtige format raus doch stehen in der serverliste.alt server drin, die bei serverliste.neu nicht berücksichtigt wurden demnach wurde bei denen auch das pw nicht geändert.

beispiel von der auswertung:

Code:
service servername root@servername geändertes passwort
--> so würds passen und dann kommen teilweise zeilen dazwischen mit:

Code:
service servername ....NICHTS... ...NICHTS...

also es steht nicht "nichts" dort aber ihr wisst schon was ich meine ;)
und damit da nicht "nichts" steht (ich weiß, verwirrend *g*) sollen dort die alten passwörter stehen und die wiederum werden aus dem file serverliste.ganzalt genommen welche folgendes format haben:

Code:
root@servername - passwort


*uff*
 
Zuletzt bearbeitet:
Ich finde es unschön, wenn man die Aufgabenstellung nicht korrekt stellt. Nichstdestotrotz ist mein Code-Beispiel mit kleinen Änderungen auch für das richtige Problem anwendbar. Die Änderungen überlasse ich Dir.
 
Hi!

Wenn ich das richtig verstanden habe, dann hast du soetwas ...
> cat serverliste.alt
Service01 Server01
Service03 Server01
Service01 Server02
Service04 Server02
Service03 Server03
Service04 Server03
> cat serverliste.neu
root@Server01 passwort01
root@Server02 passwort02
> cat serverliste.ganzalt
root@Server01 - passwort01_alt
root@Server02 - passwort02_alt
root@Server03 - passwort03_alt

... und willst das
> cat serverliste.alt|while read SERVICE HOST;do
> LINE=$(grep "@${HOST}" serverliste.neu)
> if [[ $? -ne 0 ]];then LINE=$(grep "@${HOST}" serverliste.ganzalt|sed 's/ -//');fi
> echo "${SERVICE} ${LINE}"
> done
Service01 root@Server01 passwort01
Service03 root@Server01 passwort01
Service01 root@Server02 passwort02
Service04 root@Server02 passwort02
Service03 root@Server03 passwort03_alt
Service04 root@Server03 passwort03_alt

Richtig?

edit:mir geht's nur darum, die Logik zu verstehen, Formatierung ist mir egal ...
 
Zuletzt bearbeitet:
bisschen durcheinander aber fast stimmt es was du geschrieben hast:

machen möchte ich diesen hier...

cat service_server_list_sorted_mit_root | while read x
do
set $x
pw_eintrag=`grep $2 new_root_logins.list`
if [ "$pw_eintrag" = "" ]
then
#hier müssten nun die einträge aus der serverliste welche das format
#enthalten service root@servername altespasswort in die auflistung von printf
#reingegreped werden und dabei scheitere ich
fi
printf "%-25s\t%-25s\t%-5s\n" "$1" "$pw_eintrag"
done
 

Ähnliche Themen

[HowTo] TeamSpeak 2 - RC2 - Server (Deutsch/Englisch)

Zurück
Oben