Bestimmte Zeichen in text herausfiltern (Lizenzauswertung)

Hinweis: In dem Thema Bestimmte Zeichen in text herausfiltern (Lizenzauswertung) gibt es 7 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Hallo openSuse Forum,


    seit längerem sitze ich an einem (für mich) sehr schweren Problem, für das ich einfach keine Lösung finde.


    Folgender Fall:
    Für ein bestimmtes Programm werden die verbrauchten Lizenzen in eine Textdatei geschrieben. In dieser Textdatei steht der Windows-User, der gerade im System eingeloggt ist und die "Server-ID". Denn das Programm läuft als Echt- und Testsystem auf jeweils unterschiedlichen Servern.


    Damit ihr euch ungefähr ein Bild machen könnt, hier der ungefähre Aufbau der Datei:



    Hier ist zu sehen, dass der User "saubaer" mehrfach im Echtsystem "12345678" und im Testsystem gleichzeitig sein kann. Um nun die Lizenzen zu zählen benutze ich zur Zeit grep, welches mir die Anzahl der "12345678" in eine andere Textdatei reinschreibt. Wegen gerade genannten Grund ist diese Auswertung jedoch leicht verfälscht. Denn obwohl "saubaer" 2x in der Textdatei reingeschrieben wurde, wird nur eine Lizenz auf dem Echtsystem gezählt. Gleiches Verfahren beim Testsystem.
    ->Richtigerweise müssten also gerade 1 Lizenz für Echt- und 1 Lizenz fürs Testsystem berechnet werden.


    Was ich bräuchte wäre ein Skript (grep?), welches das bewerkstelligen kann.


    Falls ihr weitere Fragen habt oder mehr Informationen benötigt bitte fragen. Eine Lösung wäre mir sehr hilfreich.


    Auf dem Server ist suse 11.0 mit KDE 3


    Vielen Dank

    Für den Inhalt des Beitrages 28445 haftet ausdrücklich der jeweilige Autor: SauBAER

  • Hallo,


    Vielleicht hilft Dir hier eine geordnete Liste aller user. Am elegantesten lässt sich die Aufgabe wohl mit einem 'awk' oder 'perl' script lösen. Aber hier ist eine 'sed' Variante -- mach ein copy/paste zum testen:



    Kannst das script Deinen Vorstellungen anpassen :D


    Gruss,
    Roland


    Nachtrag: Mein test input:



    und der script output:


    Code
    > ./sort_user input.txt output.txt


    Code
    user="baerfekt"		serverid=12345678		bla=grub		schwup=didup
    user="baergsteiger"		serverid=87654321		bla=blo		schwup=schwap
    user="norbaert"		serverid=12345678		bla=trupp		schwup=wupp
    user="saubaer"		serverid=12345678		bla=blub		schwup=diwup
    user="saubaer"		serverid=12345678		bla=lup		schwup=puwhcs
    user="saubaer"		serverid=87654321		bla=frup		schwup=diwup

    3 Mal editiert, zuletzt von rme ()

    Für den Inhalt des Beitrages 28446 haftet ausdrücklich der jeweilige Autor: rme

  • Hier ist noch ein etwas robusteres script (die Anzahl Zeilen pro Eintrag ist jetzt beliebig):



    Aufruf / Input / Output:


    Code
    > ./sort_users 001.txt 002.txt


    oder


    Code
    > sh sort_users 001.txt 002.txt


    Input: 001.txt



    Output: 002.txt


    Code
    user="baerfekt"   serverid=12345678   bla=grub   schwup=didup
    user="baergsteiger"   serverid=87654321   bla=blo   schwup=schwap
    user="norbaert"   serverid=12345678   bla=trupp   schwup=wupp
    user="saubaer"   serverid=12345678   bla=blub   schwup=diwup
    user="saubaer"   serverid=12345678   bla=lup   schwup=puwhcs   extraline abc   extraline xyz
    user="saubaer"   serverid=87654321   bla=frup   schwup=diwup


    Gruss,
    Roland

    Für den Inhalt des Beitrages 28447 haftet ausdrücklich der jeweilige Autor: rme

  • Guten Abend Roland,


    vielen Dank schon mal für die Hilfestellung. leider kann ich es erst morgen auf der Arbeit ausprobieren.
    Das oben war nur ein Muster, wie die Datei ungefähr aussieht. Hier hab ich jetzt den oirginalen Aufbau der Datei:


    Der Aufbau dürfte dem Aufbau der Originaldatei sehr nahe kommen.

    Für den Inhalt des Beitrages 28467 haftet ausdrücklich der jeweilige Autor: SauBAER

  • Hallo,


    Das zuletzt gelieferte Daten-Beispiel ist etwas komplexer. Ich habe daher das script angepasst:



    Die Ausgabe mit zuletzt geliefertem Daten-Beispiel sollte sein:


    Code
    > ./sort_records 001.txt 002.txt



    Falls Du keine leeren Zeilen zwischen den Records möchtest, bitte im script die Zeile:


    Code
    sed -i 's/.*/&\o012/' $outputfile     # insert an empty line between records


    auskommentieren.


    Gruss,
    Roland

    Für den Inhalt des Beitrages 28473 haftet ausdrücklich der jeweilige Autor: rme

  • Wow vielen Dank Roland. Habs heute getestet und funktioniert wunderbar.


    Jetzt hab ich ja die ganzen Codeblöcke in einer Zeile. Einige Dinge stören mich jedoch noch beim Auswerten.


    An sich bräuchte ich nur die Kombination von "user" und "server_id" in einer Zeile. Falls diese Kombination z.B.

    Code
    user="saubaer" | server_id="1234567898"


    2x oder mehr in der Textfile exisiertiert subtrahiere ich von der Summe der Gesamtlizenzen - 1. Oder wenn es mehrere Male drin is, dann lösche alle "Duplikate im Output" bis auf eins. Dann kann ich im Nachhinein mit meinem schon erstellen Skript die Anzahl der "Server_ID=1234567898" zählen und in eine Textdatei schreiben.


    Wie stelle ich sowas an?


    Größten Dank

    Für den Inhalt des Beitrages 28482 haftet ausdrücklich der jeweilige Autor: SauBAER

  • Hallo,


    Also, für nächstes Mal ... wenn Du gleich zu Beginn genauer gesagt hättest was Du erreichen möchtest wäre einiges an Aufwand/Zeit eingespart worden :D



    Code
    > ./sort_records input.txt output.txt


    Code
    baergsteiger | 1234567898 
    lorbaer | 1234567898
    saubaer | 1234567891
    saubaer | 1234567898
    saubaer | 9876543212


    Falls Du folgender Output möchtest, bitte entsprechende Zeile im script entfernen (d.h. # voranstellen).


    Code
    user="baergsteiger"  | server_id="1234567898"
    user="lorbaer"  | server_id="1234567898"
    user="saubaer"  | server_id="1234567891"
    user="saubaer"  | server_id="1234567898"
    user="saubaer"  | server_id="9876543212"


    Gruss,
    Roland

    Einmal editiert, zuletzt von rme ()

    Für den Inhalt des Beitrages 28493 haftet ausdrücklich der jeweilige Autor: rme

  • Wow. Du bist mein heutiger Tagesheld ;)


    Das Skript funktioniert wunderbar. Jetzt hab ich auch ne übersichtliche Übersicht aller User.


    Denke den Rest kann ich dann mit meinem vorhandenen Skript erledigen. Werde das am Montag gleich mal testen.


    Wo hast du denn so das scripten gelernt? :thumbup:


    Hast du das alles selbst gemacht oder hattest du schon ne Vorlage?

    Für den Inhalt des Beitrages 28507 haftet ausdrücklich der jeweilige Autor: SauBAER