github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/modules/BOSH.Sysprep/print_conflicted_from_audit_csv.rb (about) 1 #!/usr/bin/env ruby 2 3 class AuditFile 4 attr_accessor :header 5 attr_accessor :contents 6 7 def initialize(header, contents) 8 @header = header 9 @contents = contents 10 end 11 12 def self.from_string(s) 13 lines = s.split "\r\n" 14 header = lines[0] 15 contents = lines[1..-1] 16 17 AuditFile.new(header, contents) 18 end 19 20 def print() 21 ([header] + contents).join("\r\n") 22 end 23 24 def uniq() 25 uniqed = contents.uniq do |x| 26 values = x.split(',') 27 keys = values[0..5].join('').downcase 28 setting_value = values[6] 29 keys+setting_value 30 end 31 32 AuditFile.new(header, uniqed) 33 end 34 35 def size() 36 contents.size 37 end 38 end 39 40 def merge(a, b) 41 AuditFile.new(a.header, a.contents + b.contents) 42 end 43 44 a_file = File.read 'audit-cis.csv' 45 b_file = File.read 'audit-ms.csv' 46 47 a_audit = AuditFile.from_string(a_file) 48 b_audit = AuditFile.from_string(b_file) 49 50 puts "a has #{a_audit.size} lines" 51 puts "b has #{b_audit.size} lines" 52 53 merged = merge(a_audit, b_audit) 54 puts "after merge: #{merged.size} lines" 55 56 uniqued = merged.uniq 57 puts "after uniq: #{uniqued.size} lines" 58 59 grouped = uniqued.contents.group_by do |line| 60 fields = line.split ',' 61 policy_target = fields[1].downcase 62 subcategory = fields[2].downcase 63 policy_target + ',' + subcategory 64 end 65 66 dups = grouped.keys.select {|k| grouped[k].size > 1} 67 68 if(dups.nil?) 69 puts "found 0 conflicts" 70 else 71 puts "found #{dups.size} conflicts" 72 dups.each {|x| puts x} 73 end 74 75 merged_file = "audit-merged.csv" 76 File.write merged_file, uniqued.print 77 puts "wrote merged stuff to #{merged_file}"