dmesg 출력처럼 보이는 여러 로그 파일을 구문 분석해야합니다.perl을 사용하여 텍스트 파일에서 정보를 추출하십시오.
예 로그 파일 :
1325 abc.xyz.com /vol pool1 /mypath qwer.poil.com
<file2 info>
<file3 info>
.....
:
나는 작업 ID, 클라이언트, 디스크 볼륨, 디스크 풀을, 파일 출력에 인쇄해야
....
1399424400 4 abcd 2604 starting job (jobid=1325) for client abc.xyz.com, requesting resources now
RESOURCE_GRANTED 1399424400 DiskVolume=/vol;DiskPool=pool1;Path=/mypath;Server=qwer.poil.com;
....
등 때문에 출력 파일과 같이 표시됩니다
나는이 일을 시도하여 취업했다 :
if(@grepres=grep{/jobid/} <TRY>){
@splitres=split(' ',$grepres[0]);
$jobid=$splitres[1];
$jobid =~ s/\D//g;
fh는 어디입니까?
하지만 줄의 첫 번째 숫자, 즉 타임 스탬프 만 반환합니다.
어떻게 클라이언트 이름이나 서버 이름을 얻을 수 있습니까?
이 문제가 해결 되었습니까?
이 서버 이름이에 하이픈이있는 경우를 제외하고 잘 작동합니다. 예 : Server = qw-er.poil.com 인 경우 qw 만 출력하고 나머지는 무시합니다. 나는 $ re를 $ re = qr {\ b ($ re) \ b [\ s =] + ([\ w - /] +)} x로 바꿨다. 이제는 작동합니다. 감사! – user983043
@ user983043 : 예, 나는 그 방법으로 썼습니다. 왜냐하면 당신의 예제에 하이픈이 없기 때문입니다. 해당 문자 클래스는'[\ w -. /]'이어야합니다. 그렇지 않으면'qwer.poil.com'이 제대로 일치하지 않습니다 – Borodin