Wie passiert Argument ARGV aus einer Textdatei in Perl
Frage
Ich habe eine Liste von Argumenten in ein Perl-Skript übergeben, ARGV
verwenden. Das vierte Argument ist der Name des Servers, aber ich will es eine Textdatei namens mit einer Liste von Servern servers.txt
passieren. Wie gehe ich, dass in und es als Argument für ARGV
verwenden?
Beispieldatei servers.txt
:
server1
server2
server3
Arbeits Code:
# usage example: ./test.pl Jul 05 2010 <server> <logfile>
# $ARGV[0]=Jul
# $ARGV[1]=05
# $ARGV[2]=2010
# $ARGV[3]=server
# $ARGV[4]=/pathoffile
use strict;
use warnings;
my($mon,$day,$year,$server,$file) = @ARGV;
open(my $fh,"ssh $server cat $file |") or die "can't open log $server:$file: $!\n";
while (my $line = <$fh>) {
if ($line =~ /.* $mon $day \d{2}:\d{2}:\d{2} $year:.*(ERROR:|backup-date=|backup-size=|backup-time=|backup-status)/) {
print $line;
}
}
Lösung
Das sieht wie ein Job für xargs
.
Mit diesem Stand-in für Ihren test.pl
das zeigt der Befehl ausgeführt
#! /usr/bin/perl
use warnings;
use strict;
$" = "][";
print "[@ARGV]\n";
läuft
$ xargs -I{} ./test.pl Jul 05 2010 {} logfile <servers.txt
erzeugt
[Jul][05][2010][server1][logfile] [Jul][05][2010][server2][logfile] [Jul][05][2010][server3][logfile]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow