[Bash]Skript zum zählen von Listeneinträge mit anschließer Anlegung der Datei

MrDeluxe

Enthusiast
Thread Starter
Mitglied seit
01.04.2006
Beiträge
1.443
-closed-
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Hm, ich versteh nicht worauf du hinauswillst, sowas in der Art?:

Code:
let count=0; for i in `cat nagios.txt`; do echo $i > `echo $i | cut -d";" -f1 `_$count.cfg; let count=count+1; done;
 
WoW danke,

also deine Anweisung ist fast Korrekt...
Code:
let count=0; for i in `cat nagios.txt`; do echo $i > `echo $i | cut -d";" -f1 `_$count.cfg; let count=count+1; done;

Deine Anweisung sagt, dass die Einträge von oben nach unten gezählt werden ABER ich wollte es so haben das zunächst die DC einzeln gezählt werden und dann jeweils nummeriert werden, danach HA01 etc.
Ist das mit einer einfachen Anweisung machbar?

Ich danke dir trotzdem schonmal :)
 
Zuletzt bearbeitet:
Das könnte es sein:
Code:
let count=0; for i in `sort nagios.txt`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=0; fi; echo $i > $short\_$count.cfg; let count=count+1; last=$short; done;
:)
 
Auch wieder nur fast :) aber ein deutlichen Schritt weiter, wenn es mehr als 9 Einträge gibt, kommt es zum Problem, versuche grad deine Anweisung zu ermitteln wie ich das beheben könnte :/
 
Was für ein Problem? Bei mir sieht das dann so aus:
Code:
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_0.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_10.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_11.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_12.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_13.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_14.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_15.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_16.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_17.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_18.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_1.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_2.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_3.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_4.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_5.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_6.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_7.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_8.cfg
-rw-r--r-- 1 root root  45 2011-08-19 10:24 DC_9.cfg
-rw-r--r-- 1 root root  47 2011-08-19 10:24 HA01_0.cfg
-rw-r--r-- 1 root root  47 2011-08-19 10:24 HA01_1.cfg
-rw-r--r-- 1 root root  49 2011-08-19 10:24 SERU26_0.cfg
 
Ohh hast recht, da hab ich mich wirklich verguckt, irritiert irgendwie das er mit 0 anfängt. Ich danke dir vielmals :)

Code:
let count=0; for i in `sort nagios.txt`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=1; fi; echo $i > $short\_$count.cfg; let count=count+1; last=$short; done;

So fängt er mit 1 statt einer 0 an. Großartig :)
 
Und so:
Code:
let count=1; for i in `sort nagios.txt`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=1; fi; if [ "$count" -lt 10 ]; then echo $i > $short\_0$count.cfg; else echo $i > $short\_$count.cfg; fi; let count=count+1; last=$short; done;
fängt er auchnoch mit 01 an, für mehr hübsch ;) (Wenns dann dreistellig wird wird es Probleme geben, dann lieber ohne führende Null arbeiten)
 
Vielen Dank, ich weiß das ist jetzt Offtopic aber du bist eine wahre Hilfe.

Guck dir mal bitte folgende Schleife an:

Code:
cat $FILE_GRUPPEN | cut -d ";" -f1 | uniq -d | grep -v "#" | while read GRUPPEN_do
do

  # FILE_GRUPPEN_do=$WORKDIR"/"$GRUPPEN_do".cfg"
    FILE_GRUPPEN_do=$WORKDIR"/"$GRUPPEN_do""

   if [[ !-d $DIR_CHECK ]]
   then
      echo "Gruppenordner muessen angelegt werden"
          mkdir $FILE_GRUPPEN_do
   if [[ !-f $HOST_CHECK ]]
    then
      echo "Hosts muessen angelegt werden"
          let count=1; for i in `sort $FILE_GRUPPEN`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=1; fi; if [ "$count" -lt 10 ]; then echo $i > $short\_0$count.cfg; else echo $i > $short\_$count.cfg; fi; let count=count+1; last=$short; done;
        else
    
      echo "ALLES ROGER IN KAMBOCHA"
   fi

done

Beschreibung:
1. Es wird geprüft ob kein Ordner vorhanden ist, wenn es so ist, dann werden die Ordner angelegt.
2. Es wird geprüft ob Host "WSUS_04.cfg" nicht im Ordner vorhanden ist (ist der letzte Eintrag vom Skript), wenn ja, dann Lege alle Hosts an.
3. fehlend: Die Hosts müssen in die entsprechenden Ordner geschoben werden. Wie?
4. Dann muss überprüft werden ob Datei "WSUS_04.cfg" im Ordner nicht <0 ist; also >0, wenn ja, dann Schreibe Daten in die Hosts.cfg's
5. Wenn alles korrekt ist dann ist "ALLES ROGER In KAMBOCHA" :d


Ist die Syntax der darauffolgenden if-Anweisung überhaupt korrekt? Kann man das so machen? Ist die Negation
Code:
if [[ !-f $FILE_CHECK ]]
korrekt?

Danke schonmal =)
 
Zu 3.)
Zum schreiben der cfg in das richtige Verzeichniss einfach den Verzeichnissnamen mit angeben, sichergestellt das er existiert ist ja:
Code:
let count=1; for i in `sort $FILE_GRUPPEN`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=1; fi; if [ "$count" -lt 10 ]; then echo $i > $short\_0$count.cfg; else echo $i > $FILE_GRUPPEN_do/$short\_$count.cfg; fi; let count=count+1; last=$short; done;
Zu 4.)
Größer als 0 in Anzahl Zeilen oder Größe in bits? Lässt sich mit wc machen, "-l" gibt dir Anzahl der Zeilen aus, "-c" ist die Größe in bytes:
Code:
if [ `wc -l WSUS_04.cfg` -gt 0 ]
then
echo "schreibe Daten, blabla"
fi

Und
Code:
if [[ !-f $FILE_CHECK ]]
müsste sein:
Code:
if [[ ! -f $FILE_CHECK ]]
 
Hmm irgendwie klappt es nicht wie es soll. Hier mal der Komplette Code:

Code:
#!/bin/bash

###
### Variablen
###

WORKDIR=`pwd`
FILE_GRUPPEN=$WORKDIR"/nagios.txt"
FILE_GRUPPEN_do=""
DIR_CHECK=$WORKDIR"/WSUS"
HOST_CHECK=$WORKDIR"/WSUS/WSUS_3.cfg"
TMP_GRUPPEN_exist=`mktemp`
GRUPPEN_do=""

###
### Scripting
###

cat $FILE_GRUPPEN | cut -d ";" -f1 | uniq -d | grep -v "#" | while read GRUPPEN_do
do

  # FILE_GRUPPEN_do=$WORKDIR"/"$GRUPPEN_do".cfg"
    FILE_GRUPPEN_do=$WORKDIR"/"$GRUPPEN_do""

   if [[ ! -d $DIR_CHECK ]]
   then
      echo "Gruppenordner muessen angelegt werden"
	  mkdir $FILE_GRUPPEN_do
   if [[ ! -f $HOST_CHECK ]]
    then
      echo "Hosts muessen angelegt werden"
	  let count=1; for i in `sort $FILE_GRUPPEN`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=1; fi; if [ "$count" -lt 10 ]; then echo $i > $short\_0$count.cfg; else echo $i > $FILE_GRUPPEN_do/$short\_$count.cfg; fi; let count=count+1; last=$short; done;
	if [ `wc -l WSUS_04.cfg` -gt 0 ]
	then 
	   echo "HALLO" >> $HOST_CHECK
	else 
      echo "ALLES ROGER IN KAMBOCHA"
   fi

done

if [[ "`wc -l $TMP_GRUPPEN_exist | cut -d" " -f1`" -gt "0" ]]
then
   echo "### Existierende Files ###"
   echo ""
   cat $TMP_GRUPPEN_exist
fi

rm $TMP_GRUPPEN_exist

Fehler: test.sh: line 52: syntax error: unexpected end of file


Der kommt wahrscheinlich mit deiner Anweisung

Code:
let count=1; for i in `sort $FILE_GRUPPEN`; do short=`echo $i | cut -d";" -f1`; if [ "$short" != "$last" ]; then let count=1; fi; if [ "$count" -lt 10 ]; then echo $i > $short\_0$count.cfg; else echo $i > $FILE_GRUPPEN_do/$short\_$count.cfg; fi; let count=count+1; last=$short; done;
nicht zurecht :/
 
Zuletzt bearbeitet:
Eine if-Abfrage endet immer auf "fi", du hast drei if-Abfragen aber nur ein "fi" ;)
 
Ahh ok, also er hat zumindest nun was ausgeführt ABER folgendes passiert:

Er legt erstmal alle cfg's im gleichen Ordner an, dann hat er die entsprechenden Ordner angelegt und in jedem Ordner befindet sich:
-rw-r--r-- 1 root root 31 Aug 19 12:22 DC_10.cfg
-rw-r--r-- 1 root root 46 Aug 19 12:22 DC_11.cfg
-rw-r--r-- 1 root root 45 Aug 19 12:22 DC_12.cfg
-rw-r--r-- 1 root root 45 Aug 19 12:22 DC_13.cfg
-rw-r--r-- 1 root root 44 Aug 19 12:22 DC_14.cfg
-rw-r--r-- 1 root root 35 Aug 19 12:22 HA02_10.cfg
-rw-r--r-- 1 root root 36 Aug 19 12:22 HA02_11.cfg
-rw-r--r-- 1 root root 33 Aug 19 12:22 HA02_12.cfg
-rw-r--r-- 1 root root 34 Aug 19 12:22 HA02_13.cfg
-rw-r--r-- 1 root root 36 Aug 19 12:22 HA02_14.cfg
-rw-r--r-- 1 root root 39 Aug 19 12:22 HA02_15.cfg
-rw-r--r-- 1 root root 34 Aug 19 12:22 HA02_16.cfg
-rw-r--r-- 1 root root 34 Aug 19 12:22 HA02_17.cfg
-rw-r--r-- 1 root root 33 Aug 19 12:22 HA02_18.cfg
-rw-r--r-- 1 root root 33 Aug 19 12:22 HA02_19.cfg
-rw-r--r-- 1 root root 47 Aug 19 12:22 HA02_20.cfg
-rw-r--r-- 1 root root 47 Aug 19 12:22 HA02_21.cfg
-rw-r--r-- 1 root root 32 Aug 19 12:22 HA02_22.cfg
-rw-r--r-- 1 root root 38 Aug 19 12:22 HA02_23.cfg
-rw-r--r-- 1 root root 38 Aug 19 12:22 HA02_24.cfg
-rw-r--r-- 1 root root 38 Aug 19 12:22 HA02_25.cfg
-rw-r--r-- 1 root root 38 Aug 19 12:22 HA02_26.cfg
-rw-r--r-- 1 root root 38 Aug 19 12:22 HA02_27.cfg
-rw-r--r-- 1 root root 46 Aug 19 12:22 HA02_28.cfg
-rw-r--r-- 1 root root 46 Aug 19 12:22 HA02_29.cfg
-rw-r--r-- 1 root root 31 Aug 19 12:22 HA04_10.cfg
-rw-r--r-- 1 root root 46 Aug 19 12:22 HA05_10.cfg
-rw-r--r-- 1 root root 46 Aug 19 12:22 HA05_11.cfg

:(
 
Ich hatte mir dein Script nicht komplett angeschaut, ich glaube man zieht das ganze nochmal ganz von vorne auf:
Du willst ein Script das aus der Datei "nagios.txt" eine Verzeichniss und Dateistruktur baut, richtig? Wieso hast du dann den Host (?) "WSUS_3" fest im Script verdrahtet?
Wie setzten sich Dateinamen und Verzeichnissnamen zusammen? Kannst du Exemplarisch einen Ausschnitt aus der "nagios.txt" posten und wie die Dateien und Verzeichniss dafür aussehen sollen?
Das ganze ist ja doch ein bisschen komplexer und so ganz blick ich noch nicht durch ;)
 
Kein Problem, versteh dich auch :)

Du willst ein Script das aus der Datei "nagios.txt" eine Verzeichniss und Dateistruktur baut, richtig?
Richtig UND in den Dateien soll dann auch was stehen.

Wieso hast du dann den Host (?) "WSUS_3" fest im Script verdrahtet?
Sry müsste WSUS_04.cfg lauten. Habe das deshalb reingebaut, weil ich einen Anhaltspunkt brauche. Wenn die Datei im Ordner WSUS liegt ist quasi alles in Ordnung. Für eine Verbesserungsvorschlag bin ich sehr offen :)

nagios.txt

DC;ping;seru04.hft-leipzzig.de;;IP_Campusnetz
DC;ping;mseru04;;IP_Management
DC;rpc;seru04.hft-leipzzig.de;;Remotezugriff
DC;ping;seru08.hft-leipzig.de;;IP_Campusnetz
DC;ping;mseru08;;IP_Management
DC;rpc;seru08.hft-leipzig.de;;Remotezugriff
DC;ntp;time01.hft-leipzzig.de;;
DC;ntp;time02.hft-leipzig.de;;
DC;ldaps;seru04.hft-leipzzig.de;;
DC;ldaps;seru08.hft-leipzig.de;;
DC;dns;seru04.hft-leipzzig.de;;
DC;dns;seru08.hft-leipzig.de;;
DC;dhcp;seru04.hft-leipzzig.de;;
DC;dhcp;seru08.hft-leipzig.de;;
HA01;ping;seru29.hft-leipzig.de;;IP_Campusnetz
HA01;ping;mseru29;;IP_Management
HA01;ssh;seru29.hft-leipzig.de;;Remotezugriff
HA01;ping;seru30.hft-leipzig.de;;IP_Campusnetz
HA01;ping;mseru30;;IP_Management
HA01;ssh;seru30.hft-leipzig.de;;Remotezugriff
HA01;http(s);seru29.hft-leipzig.de;;
HA01;http(s);seru30.hft-leipzig.de;;
HA02;ping;seru02.hft-leipzig.de;;IP_Campusnetz
HA02;ping;mseru02;;IP_Management
HA02;ssh;seru02.hft-leipzig.de;;Remotezugriff
HA02;ping;seru21.hft-leipzig.de;;IP_Campusnetz
HA02;ping;mseru21;;IP_Management
HA02;ssh;seru21.hft-leipzig.de;;Remotezugriff
HA02;http(s);www.hft-leipzig.de;;
HA02;http(s);ilias.hft-leipzig.de;
HA02;http(s);jtweb.hft-leipzig.de;
HA02;ftp;jtweb.hft-leipzig.de;3000
HA02;http(s);alumni.hft-leipzig.de;
HA02;http(s);jobportal.hft-leipzig.de;
HA02;http(s);jobportal.hft-leipzig.de;
HA02;http(s);www1.hft-leipzig.de;
HA02;http(s);bibo.hft-leipzig.de;
HA02;http(s);gwweb.hft-leipzig.de;
HA02;http(s);moodle.hft-leipzig.de;
HA02;http(s);update.hft-leipzig.de;
HA02;http(s);owa.hft-leipzig.de;
HA02;http(s);test.hft-leipzig.de;
HA02;http(s);evaluation.hft-leipzig.de;
HA02;http(s);webalizer.hft-leipzig.de;
HA02;http(s);banner.hft-leipzig.de;
HA02;squid;proxy.hft-leipzig.de;3127;
HA02;squid;proxy.hft-leipzig.de;3128;
HA02;squid;proxy.hft-leipzig.de;3129;
HA02;squid;proxy.hft-leipzig.de;3130;
HA02;squid;proxy.hft-leipzig.de;3131;
HA02;squid;212.184.75.121;3127;
HA03;ping;seru27.hft-leipzig.de;;IP_Campusnetz
HA03;ping;mseru27;;IP_Management
HA03;ssh;seru27.hft-leipzig.de;;Remotezugriff
HA03;ping;seru28.hft-leipzig.de;;IP_Campusnetz
HA03;ping;mseru28;;IP_Management
HA03;ssh;seru28.hft-leipzig.de;;Remotezugriff
HA03;http(s);seru27.hft-leipzig.de;;

Verzeichnisse: z.B. HA03 (quasi die Gruppe)
Dateien: z.B. HA03_01.cfg (Gruppenmitglied in HA03)
Inhalt Dateien: die Services, URL und Beschreibung müssen dann in die jeweilige Datei in der Form, dass Nagios damit was anfangen kann
 
Zuletzt bearbeitet:
Ok, ich glaub ich hatte mir das zu kompliziert vorgestellt, dieses Script:
Code:
#! /bin/bash
let count=1;
for i in `sort nagios.txt | egrep -v "^#"`
do
        # Den Gruppennamen aus der aktuellen Zeile besorgen
        short=`echo $i | cut -d";" -f1`
        # Haben wir den Gruppennamen schonmal gesehen?
        if [ "$short" != "$last" ]
        then
                # Wenn nicht, Counter zuruecksetzten
                let count=1
                # Und ein neues Verzeichniss erstellen
                mkdir -p Daten/$short
        fi
        # Die aktuelle Zeile in eine Datei im Gruppenverzeichniss schreiben
        echo $i > Daten/$short/$short\_$count.cfg
        # Counter hochzaehlen fuer die naechste Datei
        let count=count+1
        # Und wir merken uns den letzten Gruppennamen
        last=$short
done
erzeugt diese Struktur mit jeweils einer Zeile Inhalt pro Datei:
root@roflcopt3r:~/nagios# du -ah Daten/
4,0K Daten/HA02/HA02_14.cfg
4,0K Daten/HA02/HA02_9.cfg
4,0K Daten/HA02/HA02_8.cfg
4,0K Daten/HA02/HA02_29.cfg
4,0K Daten/HA02/HA02_5.cfg
4,0K Daten/HA02/HA02_26.cfg
4,0K Daten/HA02/HA02_1.cfg
4,0K Daten/HA02/HA02_28.cfg
4,0K Daten/HA02/HA02_22.cfg
4,0K Daten/HA02/HA02_13.cfg
4,0K Daten/HA02/HA02_2.cfg
4,0K Daten/HA02/HA02_16.cfg
4,0K Daten/HA02/HA02_3.cfg
4,0K Daten/HA02/HA02_6.cfg
4,0K Daten/HA02/HA02_27.cfg
4,0K Daten/HA02/HA02_17.cfg
4,0K Daten/HA02/HA02_19.cfg
4,0K Daten/HA02/HA02_18.cfg
4,0K Daten/HA02/HA02_11.cfg
4,0K Daten/HA02/HA02_25.cfg
4,0K Daten/HA02/HA02_23.cfg
4,0K Daten/HA02/HA02_20.cfg
4,0K Daten/HA02/HA02_21.cfg
4,0K Daten/HA02/HA02_15.cfg
4,0K Daten/HA02/HA02_12.cfg
4,0K Daten/HA02/HA02_10.cfg
4,0K Daten/HA02/HA02_7.cfg
4,0K Daten/HA02/HA02_4.cfg
4,0K Daten/HA02/HA02_24.cfg
120K Daten/HA02
4,0K Daten/DC/DC_10.cfg
4,0K Daten/DC/DC_2.cfg
4,0K Daten/DC/DC_14.cfg
4,0K Daten/DC/DC_5.cfg
4,0K Daten/DC/DC_8.cfg
4,0K Daten/DC/DC_4.cfg
4,0K Daten/DC/DC_12.cfg
4,0K Daten/DC/DC_6.cfg
4,0K Daten/DC/DC_9.cfg
4,0K Daten/DC/DC_11.cfg
4,0K Daten/DC/DC_3.cfg
4,0K Daten/DC/DC_13.cfg
4,0K Daten/DC/DC_7.cfg
4,0K Daten/DC/DC_1.cfg
60K Daten/DC
4,0K Daten/HA01/HA01_5.cfg
4,0K Daten/HA01/HA01_2.cfg
4,0K Daten/HA01/HA01_4.cfg
4,0K Daten/HA01/HA01_6.cfg
4,0K Daten/HA01/HA01_3.cfg
4,0K Daten/HA01/HA01_7.cfg
4,0K Daten/HA01/HA01_8.cfg
4,0K Daten/HA01/HA01_1.cfg
36K Daten/HA01
4,0K Daten/HA03/HA03_3.cfg
4,0K Daten/HA03/HA03_1.cfg
4,0K Daten/HA03/HA03_4.cfg
4,0K Daten/HA03/HA03_6.cfg
4,0K Daten/HA03/HA03_5.cfg
4,0K Daten/HA03/HA03_2.cfg
4,0K Daten/HA03/HA03_7.cfg
32K Daten/HA03

Eventuell noch den Pfad "Daten" anpassen oder in eine Variable lagern und dann könnte das passen :>

Edit:
Script angepasst, Zeilen die mit "#" beginnen werden ignoriert
 
Zuletzt bearbeitet:
Heidewitzka, sowas schüttelst du einfach aus dem Ärmel? :hail: Echt super!
 
Das ist nur der Einzeiler von vorhin erweitert um das Anlegen vom Verzeichniss ;)
 
Und zuzüglich hast du noch Daten in die Dateien geschrieben. ;) Ahh mist, mir fehlt noch die Fehlererkennung bemerk ich grade :d

Wenn der die Ordner und Dateien findet, soll er mir das auch sagen =)


Eine If- Abfrage noch dazu ob alle Ordner mit Dateien (Dateien>0) vorhanden sind, wenn ja Ausgabe der existierenden Ordner mit Inhalt.
 
Zuletzt bearbeitet:
Das bekommst du wohl hin, oder? ;)
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh