Hallo zusammen,
ich benötige mal wieder einen Denkanstoß für folgendes Problem.
Ich habe eine Datei die im Prinzip folgenden Aufbau hat:
Ein Device Block besteht immer aus folgenden Zeilen:
1. Zeile: WWPN deviceName Vendor
2. Zeile: Size Features
3. Zeile: Policy Status
4+n Zeilen: Phys. Devices, wobei die Anzahl variieren kann.
Hinweis:
Es kann auch vorkommen das die Anzahl der Zeilen für die phys. Devices unterschiedlich ist, also z.B. folgender Output:
Weiterhin kann es auch zwei Zeilen mit Policy geben:
Aufgabe:
Ich benötige die "Blöcke", sprich die Zeilen 1-4+n eines bestimmten Vendors in einer Result Datei.
Diese Datei sollte dann bezogen auf das oben gezeigte Beispiel folgenden Inhalt haben:
Was ich schon habe ist die Zeile 1, sprich die mit dem Vendor (z.B. FUJITSU,ETERNUS_DXH), heraus zu suchen und in eine Datei "Results.txt" zu schreiben. Hier mal der hierfür relevante Code:
Wo ich jetzt hänge, ich weiß nicht wie ich die nächsten zugehörigen Zeilen, die auf das ermittelte Device folgen, bestimmen und dann in die Datei schreiben soll?
Hat jemand hier eine Idee?
Gruß
Ralf
ich benötige mal wieder einen Denkanstoß für folgendes Problem.
Ich habe eine Datei die im Prinzip folgenden Aufbau hat:
Code:
360030057022ae9401e29346c3ba7c3c5 dm-0 FTS,PRAID EP420i
size=120G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 0:2:1:0 sdb 8:16 active ready running
3600000e00d2b0000002b01b001450000 dm-1 FUJITSU,ETERNUS_DXH
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:10 sdu 65:64 active ready running
|- 1:0:0:10 sdc 8:32 active ready running
|- 4:0:1:10 sdad 65:208 active ready running
`- 1:0:1:10 sdl 8:176 active ready running
3600000e00d2b0000002b01b001910000 dm-3 FUJITSU,ETERNUS_DXH
size=70G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:40 sdw 65:96 active ready running
|- 1:0:0:40 sde 8:64 active ready running
|- 4:0:1:40 sdaf 65:240 active ready running
`- 1:0:1:40 sdn 8:208 active ready running
3600000e00d2b0000002b01b0015c0000 dm-4 FUJITSU,ETERNUS_DXH
size=2.0T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:200 sdx 65:112 active ready running
|- 1:0:0:200 sdf 8:80 active ready running
|- 4:0:1:200 sdag 66:0 active ready running
`- 1:0:1:200 sdo 8:224 active ready running
Ein Device Block besteht immer aus folgenden Zeilen:
1. Zeile: WWPN deviceName Vendor
2. Zeile: Size Features
3. Zeile: Policy Status
4+n Zeilen: Phys. Devices, wobei die Anzahl variieren kann.
Hinweis:
Es kann auch vorkommen das die Anzahl der Zeilen für die phys. Devices unterschiedlich ist, also z.B. folgender Output:
Code:
360030057022ae9401e29346c3ba7c3c5 dm-0 FTS,PRAID EP420i
size=120G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
`- 0:2:1:0 sdb 8:16 active ready running
3600000e00d2b0000002b01b001450000 dm-1 FUJITSU,ETERNUS_DXH
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
`- 1:0:1:10 sdl 8:176 active ready running
3600000e00d2b0000002b01b001910000 dm-3 FUJITSU,ETERNUS_DXH
size=70G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:40 sdw 65:96 active ready running
|- 1:0:0:40 sde 8:64 active ready running
|- 4:0:1:40 sdaf 65:240 active ready running
`- 1:0:1:40 sdn 8:208 active ready running
3600000e00d2b0000002b01b0015c0000 dm-4 FUJITSU,ETERNUS_DXH
size=2.0T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:200 sdx 65:112 active ready running
|- 4:0:1:200 sdag 66:0 active ready running
`- 1:0:1:200 sdo 8:224 active ready running
Weiterhin kann es auch zwei Zeilen mit Policy geben:
Code:
3600000e00d2a0000002a0c9905de0000 dm-2 FUJITSU,ETERNUS_DXM
size=1.5T features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 11:0:1:2 sdg 8:96 active ready running
| `- 12:0:1:2 sdm 8:192 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
|- 11:0:0:2 sdd 8:48 active ready running
`- 12:0:0:2 sdj 8:144 active ready running
Aufgabe:
Ich benötige die "Blöcke", sprich die Zeilen 1-4+n eines bestimmten Vendors in einer Result Datei.
Diese Datei sollte dann bezogen auf das oben gezeigte Beispiel folgenden Inhalt haben:
Code:
3600000e00d2b0000002b01b001450000 dm-1 FUJITSU,ETERNUS_DXH
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:10 sdu 65:64 active ready running
|- 1:0:0:10 sdc 8:32 active ready running
|- 4:0:1:10 sdad 65:208 active ready running
`- 1:0:1:10 sdl 8:176 active ready running
3600000e00d2b0000002b01b001910000 dm-3 FUJITSU,ETERNUS_DXH
size=70G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:40 sdw 65:96 active ready running
|- 1:0:0:40 sde 8:64 active ready running
|- 4:0:1:40 sdaf 65:240 active ready running
`- 1:0:1:40 sdn 8:208 active ready running
3600000e00d2b0000002b01b0015c0000 dm-4 FUJITSU,ETERNUS_DXH
size=2.0T features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=50 status=active
|- 4:0:0:200 sdx 65:112 active ready running
|- 1:0:0:200 sdf 8:80 active ready running
|- 4:0:1:200 sdag 66:0 active ready running
`- 1:0:1:200 sdo 8:224 active ready running
Was ich schon habe ist die Zeile 1, sprich die mit dem Vendor (z.B. FUJITSU,ETERNUS_DXH), heraus zu suchen und in eine Datei "Results.txt" zu schreiben. Hier mal der hierfür relevante Code:
Java:
public static void main(String args[]) throws IOException {
File sourceFile = new File("C:\\Users\\PDBRBOER\\Downloads\\multipath-ll.txt");
FileReader fr = new FileReader(sourceFile);
BufferedReader bufr = new BufferedReader(fr);
final String resultFile = "C:\\Users\\PDBRBOER\\Downloads\\Results.txt";
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter out = null;
try {
fw = new FileWriter(resultFile, true);
bw = new BufferedWriter(fw);
out = new PrintWriter(bw);
} catch (Exception e) {
e.printStackTrace();
}
int count = 0;
int countFJEternusDevices = 0;
String line = bufr.readLine();
while (line != null) {
String[] splitLineArray = line.split(" ");
if (splitLineArray[2].equals("FUJITSU,ETERNUS_DXH")) {
countFJEternusDevices++;
out.println(line);
}
count++;
line = bufr.readLine();
}
System.out.println("Number of lines: " + count);
System.out.println("Number FUJITSU,ETERNUS_DXH devices: " + countFJEternusDevices);
try {
if (out != null)
out.close();
if (bw != null)
bw.close();
if (fw != null)
fw.close();
if (bufr != null)
bufr.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Wo ich jetzt hänge, ich weiß nicht wie ich die nächsten zugehörigen Zeilen, die auf das ermittelte Device folgen, bestimmen und dann in die Datei schreiben soll?
Hat jemand hier eine Idee?
Gruß
Ralf
Zuletzt bearbeitet: