2011-11-07 2 views
0

원시 로그 데이터 (crontab -l 결과)를 포함하는 파일 그룹을 구문 분석하고이 데이터를 CSV 파일로 변환하는 방법을 알아 내려고합니다. 파일의 항목은 다음과 같습니다.텍스트 파일 구문 분석 및 CSV 생성

10,25,40,55 * * * * /some/cron/here > /dev/null 2>&1 
30 */4 * * * /some/cron/here 

이렇게하면됩니다.

은 내가 CSV 파일 형식으로 그들을 싶어 : 등등

Cronjob | # of Servers | Every minute | Every hour | Every day | Every week | Every month 
----------------------------------------------------------------------------------------- 
CronHere| 10 | N | N | Y | Y | Y 
CronHere| 8 | Y | N | N | Y | Y 

그리고있다.

누구든지 내가이 일을 어떻게 할 것인지 예를 들어 줄 수 있습니까?

+0

질문에 모순이 있음에 유의하십시오. CSV 파일에는 쉼표로 구분 된 값 (CSV)이 들어 있습니다. 값의 구분 기호가 다릅니다. – MetaEd

+0

@MetaEd : 입력은'crontab -l' 목록이고, 원하는 출력은 지정된 형식의 CSV 파일입니다. 모순이 없습니다. –

+0

@muistooshort : 출력 파일을 쉼표 대신 구분 기호로 사용하기 때문에 출력 파일을 CSV라고해서는 안됩니다. Pedantic, 예, 대부분의 사람들이 구분 기호가 다른 CSV가 구문 분석되고 쉼표 구분 기호가있는 CSV와 정확히 똑같이 쓰여지는 것을 볼 수 있습니다. – CanSpice

답변

0

다음은이 작업을 완료하는 방법입니다. 루비 덕분입니다.

#!/usr/bin/ruby 

crons = [] 
counts = [] 
cparts = [] 
basedir = "/logdirectory" 
def YorN(part) 
    if part == "*" 
    "N" 
    else 
    "Y" 
    end 
end 
Dir.new(basedir).entries.each do |logfile| 
    unless File.directory? logfile 
    if logfile.split('.')[1] == 'log' 
     file = File.new(logfile, "r") 
     while (line = file.gets) 
     parts = line.split(' ') 
     if parts[5,parts.length-5] 
      cmd = parts[5,parts.length-5].join(' ') 
      idx = crons.index(cmd) 
      if idx 
      counts[idx] += 1 
      else 
      crons << cmd 
      idx = crons.index(cmd) 
      counts[idx] = 1 
      cparts[idx] = parts[0,5] # an Array containing another Array ! 
      end 
     else 
      puts "Error on: #{line} in file #{logfile}" 
     end 
     end 
     file.close 
    end 
    end 
end 
# OUTPUT results 
puts "# Servers Min Hour DOM Month DOW Cronjob" 
crons.each do |c| 
    idx = crons.index(c) 
    puts "#{counts[idx]} #{YorN(cparts[idx][0])} #{YorN(cparts[idx][1])} #{YorN(cparts[idx][2])} #{YorN(cparts[idx][3])} #{YorN(cparts[idx][4])} #{crons[idx]}" 
end 
1

당신은 펄 정규 표현식들을 가진 사람들 파일을 구문 분석 데이터를 정렬하고이 얻을 것 같은 Text::CSV

0

뭔가를 사용하여 출력을 저장 당신은 시작 할 수 있습니다

#!/usr/bin/env perl 
use strict; 
use warnings; 
while (<>) { 
    chomp; 
    my @line = split q(), $_, 6; 
    print join q(|), $line[5], @line[0..4], "\n"; 
} 

를 서버의 수를 열거에 관해서는 어떤 작업을위한 가 발생하면 작업을 차별화하는 방법을 더 잘 정의해야합니다. 이름 만 사용하거나 모든 인수를 완전히 일치시켜야합니다. 일단 그렇게하면 계산에 해시를 사용할 수 있습니다.