ホストへのトレースルートを実行し、それらをファイルに保存するシェルスクリプトをいくつか作成しました。.log
これは完全に機能し、意図したとおりにすべてのデータをファイルに出力します。
.log
次に、これを.csv
ファイルに変換する簡単なPerlスクリプトを作成して、Excelにインポートできるようにしました。しかし、.csv
私が書いたPerlスクリプトが生成されたファイルを見ると、時代とともにIPアドレスを持つパケットを処理するときに問題が発生します。
たとえば、.log
ファイルの次の行は完全に解析されます。
1 139.222.0.1 0.941 ms 1.446 ms 1.996 ms
次のように.csv
ファイルに追加します。
1,139.222.0.1,0.941 ms,1.446 ms,1.996 ms
ただし、tracerouteが.log
ファイルに保存されている次のようなものを返す必要があります。
12 154.54.57.98 7.579 ms 154.54.74.42 7.009 ms 130.117.0.58 7.480 ms
.csv
次に、ファイルに誤って解析され、次の.csv
ファイル全体が台無しになります(これは構成された例です)。
11,213.248.77.134,7.432 ms,9.038 ms,213.248.70.238 ms
ご覧のとおり、ホップ時間で指定されたIPが、パケットにかかった時間として使用されるようになりました。
私はこれを修正する方法について非常に混乱しています!助けていただければ幸いです。ホップごとにログをcsvに変換するコードスニペットを次に示します。
my $start = "'Hop','IP','T1','T2','T3'";
print OUTPUT "\n$_$start\n";
};
print OUTPUT "$1,$2,$3 ms,$4 ms,$5 ms\n" if (/(\d+)\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+ms\s+(\S+)/);
編集
余分なcsv列を追加し、それらに適切に挿入する独自の修正を作成しました
my $start = "'Hop','IP','T1','T1IP','T2','T2IP',T3'";
print OUTPUT "\n$_$start\n";
};
if (/(\d+)\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+ms\s+(\S+)\s+ms/){
print OUTPUT "$1,$2,$3 ms, ,$4 ms, ,$5 ms\n";
}elsif (/(\d+)\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+ms/){
print OUTPUT "$1,$2,$3 ms,$4,$5 ms, ,$6 ms\n";
}elsif (/(\d+)\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+ms\s+(\S+)\s+(\S+)\s+ms/){
print OUTPUT "$1,$2,$3 ms, ,$4 ms,$5,$6 ms\n";
}elsif (/(\d+)\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+(\S+)\s+ms\s+(\S+)\s+(\S+)\s+ms/){
print OUTPUT "$1,$2,$3 ms,$4,$5 ms,$6,$7 ms\n";
};
すべてのヘルプ/応答をありがとう!