ホストへのトレースルートを実行し、それらをファイルに保存するシェルスクリプトをいくつか作成しました。.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";
};
すべてのヘルプ/応答をありがとう!