Variable füllen mit Daten aus zwei Datein?
per batch Datei (cmd) aus zwei verschiedenen Dateien einen Wert herausfiltern und diesen in eine Variable übergeben
Hallo zusammen,
Hab mich jetzt zwei Tage durch dieses Forum gewühlt und viel neues erfahren, aber leider nicht das gefunden, was ich suche
Deshalb hoffe ich, das mir hier jemand helfen kann.
Ich habe zwei Dateien
Datei 1: abteilung.log
Datei 2: onlycluster.log
Beide Dateien sind nicht gerade klein ;)
ok...
Unter Unix löse ich das Problem wie folgt...
Damit hab ich auf alle Fälle herausgefunden, welcher Client/Rechner zu welcher Abteilung gehört... und sollte er in keiner dieser beiden Dateien vorkommen... ist als Abteilung ja zumindest "unbekannT" vorgegeben...
In cmd hab ich jetzt findstr als "pendant" zum grep unter Unix gefunden... aber leider komm ich nicht viel weiter als:
ok... damit wird zumindest schonmal die Zeile ausgegeben, in der sich der gesuchte String befindet...
Aber wie filter ich jetzt zumindest im Fall von abteilung.log genau diesen String heraus, sodass nur noch die Abteilung übrig bleibt und ich diese auch einer Variablen zuweisen kann?
Ich hoffe das war jetzt nicht zu umständlich gefragt? ;)
[Edit Biber] -Tags eingestreut. [/Edit]
Hallo zusammen,
Hab mich jetzt zwei Tage durch dieses Forum gewühlt und viel neues erfahren, aber leider nicht das gefunden, was ich suche
Deshalb hoffe ich, das mir hier jemand helfen kann.
Ich habe zwei Dateien
Datei 1: abteilung.log
Rechner Abteilung
Albany_alt Ausgemustert
Archhse1 Frei, warten auf neue Verwendung
Bayside SAPEdiAdmin
Hurley Ausgemustert
CSB1A3P Ausgemustert
BTISAP01 Kundeneigene
Fulda Frei, warten auf neue Verwendung
Chester-alt Ausgemustert
SAPIR3 Ausgemustert
Dakota_alt Ausgemustert
etc... etc...
SYSTEM|CH-jrsvpb1|CH-jrsvpb1|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH Betrieb
SYSTEM|CH-jrsapb1|CH-jrsvpb1|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business
SYSTEM|CH-jrsbq01|CH-jrsvq01|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business
SYSTEM|CH-jrsvpb1|CH-jrsvpb1|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business
SYSTEM|CH-jrsvq01|CH-jrsvq01|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.2|CH R/3-Business
SYSTEM|CH-spp00n1|CH-spp00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business
SYSTEM|CH-spp00sh|CH-spp00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business
SYSTEM|CH-spt00n1|CH-spt00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business
SYSTEM|CH-spt00n2|CH-spt00ci|XXXXX|XXXXX|XXXXX|XXXXX|AIX 5.3|CH R/3-Business
SYSTEM|ksapcl1|sapkp1|XXXXX|XXXXX|XXXXX|XXXXX|HP UX 11.11|RSM (SAP EDI Admin)
SYSTEM|ksapcl2|sapkp1|XXXXX|XXXXX|XXXXX|XXXXX|HP UX 11.11|RSM (SAP EDI Admin)
SYSTEM|de06ap36|de06ap37|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration
SYSTEM|de06ap36|de06ap39|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration
SYSTEM|de06ap38|de06ap37|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration
SYSTEM|de06ap38|de06ap39|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX 11.23|SAP Administration
SYSTEM|CSB2D1P|CSB6C1P|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX B.11.0|Ausgemustert
SYSTEM|CSB2D2P|CSB6C1P|XXXXX|XXXXX|XXXXX|XXXXX|HP-UX B.11.0|Ausgemustert
SYSTEM|gwg-db1|gwg-sap|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin)
SYSTEM|gwg-db1|gwg-db|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin)
SYSTEM|gwg-db2|gwg-sap|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin)
SYSTEM|gwg-db2|gwg-db|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin)
SYSTEM|ost-db1|ost-db|XXXXX|XXXXX|XXXXX|XXXXX|Linux RedHat ES 4.0|RSM (SAP EDI Admin)
etc... etc...
ok...
Unter Unix löse ich das Problem wie folgt...
CLIENT=`echo $1`
LOG=/nsr/logs/$CLIENT
ABTLOG="/madras/logs/abteilung.log"
CLUSTERLOG="/madras/logs/onlycluster.log"
ABT="UNBEKANNT"
grep -iw $CLIENT $ABTLOG >/dev/null
if
[ $? = 0 ]
then
ABT=`grep -iw $CLIENT $ABTLOG | grep -vi "\-alt" | grep -vi "\-neu" | cut -f2 | sort -u`
else
grep -iw $CLIENT $CLUSTERLOG >/dev/null
if
[ $? = 0 ]
then
ABT=`grep -wi $CLIENT $CLUSTERLOG | grep -vi "\-alt" | grep -vi "\-neu" | cut -d"|" -f9 | sort -u | tail -1`
fi
fi
echo "Abteilung: $ABT" >> $LOG
Damit hab ich auf alle Fälle herausgefunden, welcher Client/Rechner zu welcher Abteilung gehört... und sollte er in keiner dieser beiden Dateien vorkommen... ist als Abteilung ja zumindest "unbekannT" vorgegeben...
In cmd hab ich jetzt findstr als "pendant" zum grep unter Unix gefunden... aber leider komm ich nicht viel weiter als:
@echo off
set SUCHBEGRIFF=%1
@findstr -I %SUCHBEGRIFF% c:\temp\abteilung.log
Aber wie filter ich jetzt zumindest im Fall von abteilung.log genau diesen String heraus, sodass nur noch die Abteilung übrig bleibt und ich diese auch einer Variablen zuweisen kann?
Ich hoffe das war jetzt nicht zu umständlich gefragt? ;)
[Edit Biber] -Tags eingestreut. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 83464
Url: https://administrator.de/forum/variable-fuellen-mit-daten-aus-zwei-datein-83464.html
Ausgedruckt am: 16.05.2025 um 00:05 Uhr
7 Kommentare
Neuester Kommentar

Hallo,
ich weiszwar nicht genau, wie die Lösung wäre, aber Du kannst auch mit dem for-befehl arbeiten.
Der kann dann auch gewisse Teile (token) einer Zeile zurück geben.
Gruß Niko
ich weiszwar nicht genau, wie die Lösung wäre, aber Du kannst auch mit dem for-befehl arbeiten.
Der kann dann auch gewisse Teile (token) einer Zeile zurück geben.
Gruß Niko
Hallo TDS-Raico und willkommen im Forum!
Wie schon von NKNKNK angemerkt, kannst Du mittels "for" eine Textdatei zeilenweise lesen und die gelesenen Zeilen anhand von "delims" zerlegen - für die "abteilung.log" sähe das so aus:
Die Zerlegung erfolgt (ohne Angabe eines speziellen Delimiters) anhand von Leerzeichen oder Tabs. Als Ergebnis werden die einzelnen Teile ("tokens") in alphabetisch aufeinanderfolgende Variablen geschrieben - bei der Zerlegung oben steht demnach der Rechnername in %%i und alle danach noch folgenden Bestandteile der Zeile (ohne weitere Unterteilung wegen der Schreibweise 1*) in %%j.
Das "findstr" ließe sich noch verfeinern, indem Du den Schalter "/B" (Suchbegriff steht am Zeilenanfang) verwendest.
Grüße
bastla
P.S.: Dass Du zu den CMD-Befehlen jeweiils mit "/?" die Onlinehilfe aufrufen kannst, setze ich als bekannt voraus ...
Wie schon von NKNKNK angemerkt, kannst Du mittels "for" eine Textdatei zeilenweise lesen und die gelesenen Zeilen anhand von "delims" zerlegen - für die "abteilung.log" sähe das so aus:
@echo off & setlocal
set "CLIENT=%~1"
set "LOG=\\nsr\logs\%CLIENT%"
set "ABTLOG=\\madras\logs\abteilung.log"
REM set "SUCHBEGRIFF=%~1"
REM Suchbegriff sollte doch eigentlich %CLIENT% sein, oder?
set "ABTEILUNG=unbekannt"
for /f "tokens=1*" %%i in ('findstr /I "%CLIENT%" "%ABTLOG%"') do "set ABTEILUNG=%%j"
echo %ABTEILUNG%>>%LOG%
Das "findstr" ließe sich noch verfeinern, indem Du den Schalter "/B" (Suchbegriff steht am Zeilenanfang) verwendest.
Grüße
bastla
P.S.: Dass Du zu den CMD-Befehlen jeweiils mit "/?" die Onlinehilfe aufrufen kannst, setze ich als bekannt voraus ...
Ja mit einem For sieht es dan so aus:
Wenn du das ganze mit onlycluster.log machen willst könnte dann die Forzeile so aussehen:
Edit: ups zu langsam
@echo off
set "SUCHBEGRIFF=%~1"
set "Datei=c:\temp\abteilung.log"
FOR /F "tokens=1,* delims= " %%i in ('findstr /I "%SUCHBEGRIFF%" "%Datei%"') do echo Rechner:%%i Abteilung:%%j
set "SUCHBEGRIFF=%~1"
set "Datei=c:\temp\abteilung.log"
FOR /F "tokens=1,* delims= " %%i in ('findstr /I "%SUCHBEGRIFF%" "%Datei%"') do echo Rechner:%%i Abteilung:%%j
Wenn du das ganze mit onlycluster.log machen willst könnte dann die Forzeile so aussehen:
FOR /F "tokens=2,9 delims=^|" %%i in ('findstr /I "%SUCHBEGRIFF%" "%Datei%"') do echo Rechner:%%i Abteilung:%%j
Edit: ups zu langsam
Ähm..
Wenn du das so machst kannst du auch die Zeile
Willst du beide dateien durchsuchen ob in einer davon das ergebnis enthalten ist?
Wenn du das so machst kannst du auch die Zeile
for /f "tokens=1* " %%i in ('findstr /I "%CLIENT%" "%ABTLOG%"') do set ABT=%%j
Weglassen weil die Variable %ABT% gleich in der nächsten Zeile überschrieben werden würde.Willst du beide dateien durchsuchen ob in einer davon das ergebnis enthalten ist?