2010-07-07 4 views
1

ARGV을 사용하여 Perl 스크립트에 전달할 인수 목록이 있습니다. 네 번째 인수는 서버의 이름이지만 servers.txt이라는 서버 목록이있는 텍스트 파일을 전달하려고합니다. 그걸 어떻게 전달하고 ARGV의 인수로 사용합니까?Perl의 텍스트 파일에서 ARGV에 인수를 전달하는 방법

샘플 파일 servers.txt :

server1 
server2 
server3 

근무 코드 :

# 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; 
    } 
} 
+0

생산 실행

#! /usr/bin/perl use warnings; use strict; $" = "]["; print "[@ARGV]\n"; 

을 실행 보여줍니다 당신의 test.pl이 스탠드를-에 사용 읽기 때문에, 당신이 누락 된 부분은 정확히 무엇입니까? 원격 서버에서 파일을 cat하려고하거나 ssh 파이프를 통해 파일을 쓰고 싶습니까, 아니면 ...? – Ether

+0

@ 에테르 : 예, 로그 파일에서 정규식을 위해 원격으로 고양이를 읽고 있습니다. servers.txt 파일을 열고 while 루프에도 배치합니까? while 루프를 다른 루프 내부에 두는 것이 효율적입니까? – jdamae

답변

3

xargs의 작업처럼 보인다.

명령이

$ xargs -I{} ./test.pl Jul 05 2010 {} logfile <servers.txt

이미 파일을 여는 방법을 알고처럼 보이는

[Jul][05][2010][server1][logfile] 
[Jul][05][2010][server2][logfile] 
[Jul][05][2010][server3][logfile]
+0

이것은 멋진 것들입니다! 팁 고마워! 그것은 위대한 작품. – jdamae

+0

@ jaedre619 환영합니다. 나는 그것이 도움이 되었기 때문에 기쁘다! –

관련 문제