Thread shell Befehl umsetzen
(13 answers)
Opened by wenze at 2018-05-22 11:14
Aus dem Testlabor drei Bemerkungen, warum das Resultat bei diesem Perl-Skript möglicherweise anders aussehen wird als bei der Kommandofolge:
* uniq eliminiert nur aufeinanderfolgende gleiche Zeilen. * split( m/\s+/, $line, ) verhält sich anders als awk, wenn die Zeilen führende Leerzeichen haben. * say join( "\n", keys %seen ); gibt die Zeilen in zufälliger (ab Perl 5.18 in jedesmal neu ausgewürfelter) Reihenfolge aus. Das kann alles gut und gerne irrelevant sein, aber falls es eine Rolle spielt, hier eine Variante, die bei meinen Tests identische Resultate zur Kommandofolge liefert: Code (perl): (dl
)
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 use strict; use warnings; use 5.010; my $file = "/usr/sap/SID/SYS/profile/DEFAULT.PFL"; my $search = 'dbhost'; open my $fh, '<', $file or die "open($file,ro) failed: $!"; my $seen = ' '; LINE: while ( my $line = <$fh> ) { # skip lines without search string next LINE if index( lc($line), lc($search), 0 ) < 0; # extract the third field of line my $third = ( split( ' ', $line, ) )[2] // ''; # keep the fields uniq say $third unless $third eq $seen; $seen = $third; } close $fh; |