staging.inyokaproject.org

Perl / Eintrag im Array ändern

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

wenze

Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Hallo,

ich habe ein Problem: Ich habe ein Array mit Werten gefüllt.

1
my @ListInstances = `/usr/sap/hostctrl/exe/saphostctrl -function ListInstances  | grep -vE "DAA|DAB" |sed 's/,//g' | awk '{print \$4,":",\$6,":"}` ;

Ausgabe:

 PIS : 01 :
 PIS : 00 :
 PIS : 02 :
 WDP : 03 :

Nun nehme ich jeden Wert und möchte den ergänzen (im Moment befülle ich damit noch ein zweites Array, was ich aber lassen möchte):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

foreach (@ListInstances) {
		print "$_\n";
	my $UpperSID = substr($_,0,3);
	my $Instance = substr($_,6,2);
	my $LowerSID = lc $UpperSID;
	my $SIDadm = $LowerSID."adm";

	print "$UpperSID\n";
	
	my $disp = `su - $SIDadm -c which disp+work 2>/dev/null`;
	
	if ( defined($disp) ) {
	
	my @SapKernel_Info = `su - $SIDadm -c $disp 2>/dev/null`;

	foreach (@SapKernel_Info) {

		if (/kernel make variant/) {
			$variant = (split)[-1];
		} elsif (/compilation mode/) {
			$comp = (split)[-1];
		} elsif (/patch number/) {
			$patch = (split)[-1];
		}
	}

Ziel ist es dass es so dann aussehen soll:

PIS : 01 : 741_REL : UNICODE : 111
PIS : 00 : 741_REL : UNICODE : 111
PIS : 02 : 741_REL : UNICODE : 111
WDP : 03 : 

Danke für jeden Tipp

apt-ghetto

Anmeldungsdatum:
3. Juni 2014

Beiträge: 2943

wenze schrieb:

Hallo,

ich habe ein Problem: Ich habe ein Array mit Werten gefüllt.

Und wo ist das Problem? Es wäre natürlich praktisch, wenn du in deinem Skript auch gleich ein Array mit Testdaten zur Verfügung stellen würdest. Dann brauchst du auch keine Shellbefehle posten.

Nun nehme ich jeden Wert und möchte den ergänzen (im Moment befülle ich damit noch ein zweites Array, was ich aber lassen möchte):

So wie ich das sehe, wird das zweite Array dynamisch abgefüllt, also abhängig davon, welchen Wert $SIDadm gerade hat.

Ich habe dein Skript angepasst und mit Vermutungen aufgefüllt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/perl -w
# arrayEintrag.pl 

use warnings;
use strict;
use v5.20;    # wird nur für "say" statt "print" benötigt

my ( $variant, $comp, $patch );

my @ListInstances = ( "PIS : 01 :\n",
                      "PIS : 00 :\n",
                      "PIS : 02 :\n",
                      "WDP : 03 :\n" );

# Dieses Array fülle ich einfach mal mit Testdaten ab, dafür ist Zeile 30 auskommentiert
my @SapKernel_Info = ( "kernel make variant           742_REL\n",
                       "compilation mode              UNICODE\n",
                       "patch number                  100\n" );


foreach ( @ListInstances ) {
    chomp;

    my $SIDadm = lc substr( $_, 0, 3 ) . "adm"; # Die Variable reicht doch?

    my $disp = `su - $SIDadm -c which disp+work 2>/dev/null`;

    if ( defined( $disp )) {
        
        # my @SapKernel_Info = `su - $SIDadm -c $disp 2>/dev/null`;
    
        foreach ( @SapKernel_Info ) {
            if (/kernel make variant/) {
                $variant = (split)[-1];
            } elsif (/compilation mode/) {
                $comp = (split)[-1];
            } elsif (/patch number/) {
                $patch = (split)[-1];
            }
        }

        $_ = $_ . " $variant : $comp : $patch\n";

        say; # Fürs Debuggen
    
    }
    
}

wenze

(Themenstarter)
Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Erst einmal Danke.

Ich war in der Zwischezeit nicht untätig und hatte es jetzt erst einmal einfacher für mich gelöst.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
my @ListInstances = `/usr/sap/hostctrl/exe/saphostctrl -function ListInstances  | grep -vE "DAA|DAB" |sed 's/,//g' | awk '{print \$4,":",\$6,":"}` ;
chomp (@ListInstances);

foreach (@ListInstances) {
	#print "$_\n";
	my $UpperSID = substr($_,0,3);
	my $Instance = substr($_,6,2);
	my $LowerSID = lc $UpperSID;
	my $SIDadm = $LowerSID."adm";
	my $ListInstances = $_;
	
	#print "$UpperSID\n";
	#print "$LowerSID\n";
	#print "$SIDadm\n";
	
	my $disp =  `su - $SIDadm -c which disp+work 2>/dev/null`;
			
	if ( $? == 0 ) {
	
	#print "$disp \n";
	#print "$SIDadm\n";
	
		my @SapKernel_Info = `su - $SIDadm -c $disp 2>/dev/null`;

		foreach (@SapKernel_Info) {

			if (/kernel make variant/) {
			$variant = (split)[-1];
			} elsif (/compilation mode/) {
			$comp = (split)[-1];
			} elsif (/patch number/) {
			$patch = (split)[-1];
			}
		}
	
		my $info = $OSinfo." : ".$ListInstances." ".$variant." : ".$comp." : ".$patch;
		push @OSinfoSum, $info;
		undef $variant;
		undef $comp;
		undef $patch;	
	}
	else {
		my $info = $OSinfo." : ".$ListInstances." :   : ";
		push @OSinfoSum, $info;
	}
}

Und das ist mein Zwischenergebnis:

dbssapsid : aix : 6.1.0.0 : SID : 01 : 741_REL : UNICODE : 111
dbssapsid : aix : 6.1.0.0 : SID : 00 : 741_REL : UNICODE : 111
dbssapsid : aix : 6.1.0.0 : SID : 02 : 741_REL : UNICODE : 111
dbssapdis : aix : 6.1.0.0 : DIS : 03 : :   :

Ich werde mir morgen deine Lösung ansehen.

Gute Nacht

Antworten |