Thread shell Befehl umsetzen (13 answers)
Opened by wenze at 2018-05-22 11:14

haj
 2018-05-22 14:26
#188421 #188421
User since
2015-01-07
527 Artikel
BenutzerIn

user image
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;

View full thread shell Befehl umsetzen