gelöst IP Adressen auslesen, kopieren, modifizieren
Hallo,
ich habe ein Problem bei der automatischen Abarbeitung folgenden Problems:
In einer semikolon-getrennten csv-Datei mit Netzwerkomponenten stehen deren IDs sowie im
Idealfall zwei IP-Adressen.
Leider ist der Idealfall relativ selten.
In dem ersten IP-Adressfeld sollen ausschließlich IP-Adressen stehen, deren 2. Oktett
größergleich 144 ist. Bei den IPs, bei denen dies nicht der Fall ist, steht in der Regel im
2. Oktett eine 136. Diese IPs sollen in das Feld IP2 kopiert werden. Ausserdem soll in IP1
die Umrechnung dieser Adresse nach folgendem Muster erfolgen:
10.(136+8).(3.Oktett+16).(4.Oktett)
Hier nun noch ein Auszug aus dieser Datei:
Search code;IP Address;IP Adresse 2
TESTCI;10.145.19.101;
R6504;10.144.79.33;
R88001;10.144.187.209;
R7436;10.144.181.49;
R7435;10.144.182.177;
R6189;10.136.43.97;10.144.75.97
R7391;10.144.161.49;
R7344;10.144.178.161;
R7338;10.144.162.225;
R4503;10.144.113.1;
R6213;10.144.78.97;
R1098;10.144.137.33;
R1030;10.144.89.161;
R4591;10.144.136.193;
R6511;10.144.120.225;
R7573;10.144.161.241;
R7253;10.144.162.81;
R4051;10.144.110.1;
R1051;10.136.59.225;
Vielen Dank
Christian
ich habe ein Problem bei der automatischen Abarbeitung folgenden Problems:
In einer semikolon-getrennten csv-Datei mit Netzwerkomponenten stehen deren IDs sowie im
Idealfall zwei IP-Adressen.
Leider ist der Idealfall relativ selten.
In dem ersten IP-Adressfeld sollen ausschließlich IP-Adressen stehen, deren 2. Oktett
größergleich 144 ist. Bei den IPs, bei denen dies nicht der Fall ist, steht in der Regel im
2. Oktett eine 136. Diese IPs sollen in das Feld IP2 kopiert werden. Ausserdem soll in IP1
die Umrechnung dieser Adresse nach folgendem Muster erfolgen:
10.(136+8).(3.Oktett+16).(4.Oktett)
Hier nun noch ein Auszug aus dieser Datei:
Search code;IP Address;IP Adresse 2
TESTCI;10.145.19.101;
R6504;10.144.79.33;
R88001;10.144.187.209;
R7436;10.144.181.49;
R7435;10.144.182.177;
R6189;10.136.43.97;10.144.75.97
R7391;10.144.161.49;
R7344;10.144.178.161;
R7338;10.144.162.225;
R4503;10.144.113.1;
R6213;10.144.78.97;
R1098;10.144.137.33;
R1030;10.144.89.161;
R4591;10.144.136.193;
R6511;10.144.120.225;
R7573;10.144.161.241;
R7253;10.144.162.81;
R4051;10.144.110.1;
R1051;10.136.59.225;
Vielen Dank
Christian
9 Antworten
- LÖSUNG 6890 schreibt am 18.08.2006 um 13:41:22 Uhr
- LÖSUNG eu-admin schreibt am 18.08.2006 um 13:47:23 Uhr
- LÖSUNG 6890 schreibt am 18.08.2006 um 13:56:39 Uhr
- LÖSUNG eu-admin schreibt am 18.08.2006 um 13:47:23 Uhr
- LÖSUNG AxelHahn schreibt am 18.08.2006 um 14:26:03 Uhr
- LÖSUNG Biber schreibt am 18.08.2006 um 18:27:10 Uhr
- LÖSUNG eu-admin schreibt am 21.08.2006 um 13:37:30 Uhr
- LÖSUNG Biber schreibt am 21.08.2006 um 13:58:09 Uhr
- LÖSUNG Biber schreibt am 23.08.2006 um 15:32:30 Uhr
- LÖSUNG eu-admin schreibt am 24.08.2006 um 08:50:56 Uhr
- LÖSUNG Biber schreibt am 23.08.2006 um 15:32:30 Uhr
- LÖSUNG Biber schreibt am 21.08.2006 um 13:58:09 Uhr
- LÖSUNG eu-admin schreibt am 21.08.2006 um 13:37:30 Uhr
LÖSUNG 18.08.2006 um 13:41 Uhr
hallo,
ich denk mal in perl müsste das relativ einfach zu lösen sein oder bist du auf batch/shell angewiesen??
mfg godlike P
ich denk mal in perl müsste das relativ einfach zu lösen sein oder bist du auf batch/shell angewiesen??
mfg godlike P
LÖSUNG 18.08.2006 um 13:47 Uhr
Hallo,
Angewiesen nicht, aber mit perl kenne ich mich noch weniger aus als batch.
Christian
Angewiesen nicht, aber mit perl kenne ich mich noch weniger aus als batch.
Christian
LÖSUNG 18.08.2006 um 13:56 Uhr
kann dir ja helfen wennde willst.
mfg
mfg
LÖSUNG 18.08.2006 um 14:26 Uhr
Hallo,
so vielleicht en Ansatz mit dem du weiterkommst:
zuerst loopst du über deine CSV-Datei.
Im Label testme wird die erste IP in 4 Blöcke zerlegt und in einzelne Variablen gepackt.
Der C-Block der 2. IP wird berechnet.
Den 2. Block von der ersten IP prüfst du, ob er 144 ist, wenn ja, bisbst du alle Zeilen aus.
Falls du alles in einer Datei brauchst, leitest du die Ausgabe in eine Datei mit ">>" um.
Viele Grüsse
-= Axel =-
so vielleicht en Ansatz mit dem du weiterkommst:
01.
@echo off
02.
set csvfile=ips.csv
03.
for /F "tokens=1,2,3 delims=;" %%a in (%csvfile%) do call :testme %%a %%b %%c
04.
pause
05.
goto end
06.
07.
:testme
08.
set name=%1
09.
set ip1=%2
10.
set ip2=%3
11.
12.
set ip1_A=
13.
set ip1_B=
14.
set ip1_C=
15.
set ip1_D=
16.
for /F "tokens=1-4 delims=." %%j in ('echo %ip1%') do (set ip1_A=%%j&& set ip1_B=%%k&& set ip1_C=%%l&& set ip1_D=%%m)
17.
18.
set /a ip2_C=%ip1_C%+16
19.
if "%ip1_B%"=="144" (echo %name%;%ip1%;10.144.%ip2_C%.%ip1_D%) else echo ERROR %name% - 2. Oktett in %ip1% ist nicht 144
20.
goto end
21.
22.
:end
Im Label testme wird die erste IP in 4 Blöcke zerlegt und in einzelne Variablen gepackt.
Der C-Block der 2. IP wird berechnet.
Den 2. Block von der ersten IP prüfst du, ob er 144 ist, wenn ja, bisbst du alle Zeilen aus.
Falls du alles in einer Datei brauchst, leitest du die Ausgabe in eine Datei mit ">>" um.
Viele Grüsse
-= Axel =-
LÖSUNG 18.08.2006 um 18:27 Uhr
Moin eu_admin,
aus Spass nochmal eine etwas kompaktere Alternativ-Batchlösung.
In der Praxis würde ich aber eine etwas lesbarere (wie die von AxelHahn) vorziehen.
Nur um zu zeigen, dass es auch etwas kürzer geht..
Output auf Konsole/im 2 Schritt in neue Datei SortIps.csv:
Gruß
Biber
aus Spass nochmal eine etwas kompaktere Alternativ-Batchlösung.
In der Praxis würde ich aber eine etwas lesbarere (wie die von AxelHahn) vorziehen.
Nur um zu zeigen, dass es auch etwas kürzer geht..
01.
::----sortIps.bat ------ Parameter1= Name der CSV-Datei
02.
@echo off & setlocal enableDelayedExpansion
03.
(set /p header=<%1) && @echo !header!
04.
For /f "skip=1 delims=; tokens=1-3" %%i in (%1) do (
05.
if [%%k] Neq [] ( @If %%k GTR %%j (echo %%i;%%k;%%j) else echo %%i;%%j;%%k;) Else (
06.
For /f "tokens=1-4 delims=." %%a in ("%%j") do (
07.
IF %%b GEQ 144 ( echo %%i;%%a.%%b.%%c.%%d;) Else (
08.
(Set /a x=%%b+8) && (Set /a y=%%c+16) && (Echo %%i;%%a.!x!.!y!.%%b;%%a.%%b.%%c.%%d;
09.
)))))
01.
$cmd$sortips ips.csv
02.
Search code;IP Address;IP Adresse 2
03.
TESTCI;10.145.19.101;
04.
R6504;10.144.79.33;
05.
R88001;10.144.187.209;
06.
R7436;10.144.181.49;
07.
R7435;10.144.182.177;
08.
R6189;10.144.75.97;10.136.43.97
09.
R7391;10.144.161.49;
10.
R7344;10.144.178.161;
11.
R7338;10.144.162.225;
12.
R4503;10.144.113.1;
13.
R6213;10.144.78.97;
14.
R1098;10.144.137.33;
15.
R1030;10.144.89.161;
16.
R4591;10.144.136.193;
17.
R6511;10.144.120.225;
18.
R7573;10.144.161.241;
19.
R7253;10.144.162.81;
20.
R4051;10.144.110.1;
21.
R1051;10.144.75.136;10.136.59.225;
22.
23.
$cmd$sortips ips.csv >sortIps.csv
Biber
LÖSUNG 21.08.2006 um 13:37 Uhr
Hallo Zusammen,
vielen Dank für die vielen Ideen. Eine kleine Änderung benötige ich aber dennoch.
Die veränderten Daten müssen wieder in eine Datei (vorzugsweise dieselbe) geschrieben werden und zwar so, dass die erste IP größer ist als die zweite.
Christian
vielen Dank für die vielen Ideen. Eine kleine Änderung benötige ich aber dennoch.
Die veränderten Daten müssen wieder in eine Datei (vorzugsweise dieselbe) geschrieben werden und zwar so, dass die erste IP größer ist als die zweite.
Christian
LÖSUNG 21.08.2006 um 13:58 Uhr
Moin eu_admin,
bei meinem Script kannst Du dann den Aufruf ändern von:
...in...
...aber erst, wenn es ausgiebig getestet ist
Ich würde auf jeden Fall die Ur-Datei ips.csv nur lesen und in eine andere Datei schreiben.
Gruß
Biber
bei meinem Script kannst Du dann den Aufruf ändern von:
01.
sortips ips.csv >sortIps.csv
01.
sortips ips.csv >sortIps.csv
02.
Copy /y sortIps.csv Ips.csv
Ich würde auf jeden Fall die Ur-Datei ips.csv nur lesen und in eine andere Datei schreiben.
Gruß
Biber
LÖSUNG 23.08.2006 um 15:32 Uhr
Moin eu_admin,
noch mal eine Verfeinerung mehr auf dem Weg zu Deiner Lösung.
Wenn die gesammelten Anforderungen jetzt so aussehen:
1. IPs im Bereich 10.145.xxx.xxx soll keine Änderung vorgenommen werden. Die IP2 soll gleich der IP1 sein.
2. IPs im Bereich 10.144.xxx.xxx soll die Original-IP in IP1 gesetzt werden und das ausgerechnete Equivalent in IP2 gesetzt werden
3. Wenn IP1 im Bereich 10.136.xxx.xxx liegt, soll die IP1 auf die ausgerechnete 10.144.xxx.xxx-Adresse gesetzt werden und dier ursprüngliche IP1 in IP2 kopiert werden.
Letztendlich soll die "große" IP immer in IP1 sein.
Dann macht dieser Schnipsel....
....dieses Ergebnis:
Allerdings ist noch offen, was passieren soll, wenn das 2. Ip-Oktett weder 145 noch 144 noch 136 ist... im Moment fällt es einfach weg.
Gruß
Biber
noch mal eine Verfeinerung mehr auf dem Weg zu Deiner Lösung.
Wenn die gesammelten Anforderungen jetzt so aussehen:
1. IPs im Bereich 10.145.xxx.xxx soll keine Änderung vorgenommen werden. Die IP2 soll gleich der IP1 sein.
2. IPs im Bereich 10.144.xxx.xxx soll die Original-IP in IP1 gesetzt werden und das ausgerechnete Equivalent in IP2 gesetzt werden
3. Wenn IP1 im Bereich 10.136.xxx.xxx liegt, soll die IP1 auf die ausgerechnete 10.144.xxx.xxx-Adresse gesetzt werden und dier ursprüngliche IP1 in IP2 kopiert werden.
Letztendlich soll die "große" IP immer in IP1 sein.
Dann macht dieser Schnipsel....
01.
::-------snipp Sortips2.bat
02.
@echo off & setlocal enableDelayedExpansion & if [%1]==[] (echo Keine IP-Datei angegeben.) & goto :eof
03.
(set /p header=<%1) && @echo !header!
04.
For /f "skip=1 delims=; tokens=1-3" %%i in (%1) do (
05.
if [%%k] Neq [] ( @If %%k GTR %%j (echo %%i;%%k;%%j) else echo %%i;%%j;%%k;) Else (
06.
For /f "tokens=1-4 delims=." %%a in ("%%j") do (
07.
IF %%b EQU 145 ( echo %%i;%%j;%%j) Else (
08.
IF %%b EQU 144 ((Set /a x=%%b-8) && (Set /a y=%%c-16) && echo %%i;%%j;%%a.!x!.!y!.%%d;) Else (
09.
IF %%b EQU 136 ((Set /a x=%%b+8) && (Set /a y=%%c+16) && Echo %%i;%%a.!x!.!y!.%%d;%%j))))))
10.
::-------snapp Sortips2.bat
01.
sortips2 ips.txt
02.
Search code;IP Address;IP Adresse 2
03.
TESTCI;10.145.19.101;10.145.19.101
04.
R6504;10.144.79.33;10.136.63.33;
05.
R88001;10.144.187.209;10.136.171.209;
06.
R7436;10.144.181.49;10.136.165.49;
07.
R7435;10.144.182.177;10.136.166.177;
08.
R6189;10.144.75.97;10.136.43.97
09.
R7391;10.144.161.49;10.136.145.49;
10.
R7344;10.144.178.161;10.136.162.161;
11.
R7338;10.144.162.225;10.136.146.225;
12.
R4503;10.144.113.1;10.136.97.1;
13.
R6213;10.144.78.97;10.136.62.97;
14.
R1098;10.144.137.33;10.136.121.33;
15.
R1030;10.144.89.161;10.136.73.161;
16.
R4591;10.144.136.193;10.136.120.193;
17.
R6511;10.144.120.225;10.136.104.225;
18.
R7573;10.144.161.241;10.136.145.241;
19.
R7253;10.144.162.81;10.136.146.81;
20.
R4051;10.144.110.1;10.136.94.1;
21.
R1051;10.144.75.225;10.136.59.225
Gruß
Biber
LÖSUNG 24.08.2006 um 08:50 Uhr
Moin,
an alle die mir geantwortet haben, vielen Dank. Die Lösung von Biber hat dann wunderbar funktioniert.
MfG
Christian
an alle die mir geantwortet haben, vielen Dank. Die Lösung von Biber hat dann wunderbar funktioniert.
MfG
Christian
Ähnliche Inhalte
Neue Wissensbeiträge
Heiß diskutierte Inhalte