2017-03-14 8 views
0

ヘルプを書き、次を実装してください。 ディレクトリ内の多くの.logファイルがありますが、彼らはつまり、唯一の必要な行を読んで、Excelのテーブルに表示する必要があります解析.logファイルやExcel

Blade 11 
    Model: ProLiant BL460c Gen9 
    Manufacturer: HP 
    Serial Number: XXXXXXXXX 
    Part Number: 727021-B21 
    Spare Part Number: 820254-001 
    Mezz 1 
     Model: HP QMH2672 16Gb FC HBA for BladeSystem c-Class 
     Manufacturer: QLogic 
     Serial Number: MY56140NML 
     PCA Serial Number: MY56140NML 
     Part Number: 710608-B21 
     Spare Part Number: 711305-001 
     Product Ver: 
    Adaptive Fabric Adapter 1 
     Model: HP FlexFabric 10Gb 2-port 536FLB Adapter 
     Manufacturer: HP 
     Serial Number: 7C453705WV 
     PCA Serial Number: 7C453705WV 
     Part Number: 766490-B21 
     Spare Part Number: 768080-001 
     Product Ver: 00 

Excel 'ブレード' でテーブルを表示する必要がある:

Blade | Model | Manufacturer | Serial Number | Part Number | Spare Part Number 
11  ProLiant  HP   CZJ42800G4  XXXXXXXXX 820254-001 

12  ProLiant  HP   CZJ42800G5  XXXXXXXXX 820254-002 

サーバはルビー、PHP、Perlを持っています。 そしてsedとawkにはオプションがありますか?

私はこの方法を実装しようとしたが、私はアクションのアルゴリズムを理解していませんOK:

require 'find' 
require 'spreadsheet' 

dirs = [] 
filelog = [] 

workbook = Spreadsheet::Workbook.new 
    heading = Spreadsheet::Format.new(:weight => :bold, :size =>10, :border => :thin, :align => :merge, :pattern_fg_color => :green, :pattern => 1) 
    normal = Spreadsheet::Format.new(size: 10) 

    worksheet = workbook.create_worksheet name: 'Blade_name' 
    heading_row = worksheet.row(0) 
    heading_row.set_format(0, heading) 
    heading_row.set_format(1, heading) 
    heading_row.set_format(2, heading) 
    heading_row.set_format(3, heading) 
    heading_row.set_format(4, heading) 


    worksheet.row(0).concat(['Blade name', 'Model', 'Manufacturer', 'Part Number', 'Spare Part Number']) 
    worksheet.column(0).width=70 
    worksheet.column(1).width=19 
    worksheet.column(2).width=35 
    worksheet.column(3).width=19 
    worksheet.column(4).width=15 


# Find.find("/home/web/projects/get_log") do |f| 
# if FileTest.directory?(f) 
#  dirs.push(f) 

# else 
#  filelog.push(f) 

    # $stderr = File.open(filelog, "a+") 
# end 
# end 


$stderr = File.open('1.log', "a+") 
match = line.match('Blade') 
if match.nil? 

else 
    @results << convert_to_hash(match) 
    puts @results 
end 

そして、どのように各ラインを計算し、ブレードと比較すると、私は(= を知っているか、行きません正規表現による?

+0

SOそれはあなたを助けるためにあります、あなたのための人々のコードを聞かせする場所ではありませんインターネット上のいくつかの調査を含めて、あなた自身で1つを見つけようとした後に解決策に来ないならば、あなたの問題と一緒に。 –

+0

1時間あたり1ドル= – ssr1012

+0

ほぼYAMLですが、それほどではありません。葉巻はありません。 – Sobrique

答えて

0
tags = %w|Blade Model: 
      Manufacturer: 
      Serial\ Number: 
      Part\ Number: 
      Spare\ Part\ Number:|.map { |t| ".*?#{t}\s+(.*)\n" }.join 
input.scan(%r|#{tags}|) 
#⇒ [ 
# [0] [ 
# [0] "11", 
# [1] "ProLiant BL460c Gen9", 
# [2] "HP", 
# [3] "CZJ42800G5", 
# [4] "710608-B21", 
# [5] "820254-001" 
# ], 
# [1] [ 
# [0] "12", 
# [1] "ProLiant BL460c Gen9", 
# [2] "HP", 
# [3] "CZJ42800G5", 
# [4] "727021-B21", 
# [5] "820254-002" 
# ] 
# ] 

今だけCSV/XLSを構築するために結果の配列を使用しています。

+0

Алексей、спасибобольшое、помогли=) –