2016-09-26 13 views
-2

私は顧客のリストをタブ区切りのファイルに入れ、それぞれに対応するIP範囲のセットを持っています。しかし、私は3番目のオクテットの範囲を受け入れないデータベースにそれらをアップロードしています。すなわち、24.53.241.150-185のIPは許容されるが、24.53.150-185.241は許容されない。個別のIP範囲とIPを区切る

このリストをデータベースにアップロードするには、3番目のオクテットの範囲を含まないIPを別々のIPに分割する必要があります(例:24.53.151.241、24.53.152.241など)この一致を「Customer」と「Admin Email」の対応するフィールドと同じ形式にします。

どのようなツールを使用すればいいですか?私は柔軟です(Excelツール、Regex、Rubyなど)。

私が現在持っているものの形式: enter image description here

これは(別の行に分け3番目のオクテットで)に変身するために必要なもの:

enter image description here

+0

詳細を必要とします。 DBに必要な列を追加することはできますか?それとも既に使用している形式を使用することを余儀なくされていますか?これまで何か試してみましたか? – Beartech

+0

また、あなたは、行番号2のような単一のエントリの代わりに、すべてがHarvard | [email protected] | 34.24.123。* '.123から.198までの各IPの行がありますか? DB内のデータをどのように表示するかについて、より具体的な例を挙げる必要があります。 – Beartech

+0

最後に、少なくともいくつかのオクテットには '*'があります。それは0-255のそれぞれのエントリが必要なことを意味しますか? – Beartech

答えて

0

私はこれをRubyコードを使用して認識し、Excelファイルをタブ区切りのTXTファイルとして保存した後に適用しました。

def expand_lines(line) 
    id, inst, ip = line.split("\t") 

    ip_compontents = ip.split('.') 
    if ip_compontents[2] =~ /(\d+)-(\d+)/ 
    $1.to_i.upto($2.to_i).map do |i| 
     new_ip = [*ip_compontents[0..1], i, ip_compontents[3]].join('.') 
     [id, inst, new_ip] 
    end 
    else 
    [[id, inst, ip]] 
    end 
end 

if $0 == __FILE__ 
    ext = File.extname(ARGV[0]) 
    base = File.basename(ARGV[0], ext) 
    dir = File.dirname(ARGV[0]) 

    outfile = File.join(dir, "#{base}_expanded#{ext}") 

    expanded = IO.read(ARGV[0]).split("\n").map {|l| expand_lines(l.chomp)}.flatten(1) 
    File.open(outfile, 'w') do |f| 
    f.puts expanded.map {|l| l.join("\t")} 
    end 
end 
-1

はこれがあります文字列をipsの範囲に変換する1つの方法です。

def convert_to_range(ip) 
    arr = ip.split('.') 
    ndx = arr.index { |s| s =~ /-/ } 
    f,l = arr[ndx].split('-') 
    (f..l).map { |s| [*arr.first(ndx), s, *arr[ndx+1..-1]].join('.') } 
end 

convert_to_range("24.53.94-105.241") 
    #=> ["24.53.94.241", "24.53.95.241", "24.53.96.241", "24.53.97.241", 
    # "24.53.98.241", "24.53.99.241", "24.53.100.241", "24.53.101.241", 
    # "24.53.102.241", "24.53.103.241", "24.53.104.241", "24.53.105.241"] 

convert_to_range("24.53-58.105.241") 
    #=> ["24.53.105.241", "24.54.105.241", "24.55.105.241", "24.56.105.241", 
    # "24.57.105.241", "24.58.105.241"] 

convert_to_range("24-26.58.105.241") 
    #=> ["24.58.105.241", "25.58.105.241", "26.58.105.241"] 

convert_to_range("26.58.105.241-248") 
    #=> ["26.58.105.241", "26.58.105.242", "26.58.105.243", "26.58.105.244", 
    # "26.58.105.245", "26.58.105.246", "26.58.105.247", "26.58.105.248"] 
関連する問題