我已經編寫了一些shell腳本運行跟蹤路由到主機,然後將它們保存到文件。這完美地工作,並按預期輸出所有數據到一個.log
文件。Traceroute登錄到CSV Perl解析器正則表達式問題
然後我寫了一個簡單的Perl腳本,將.log
轉換爲.csv
文件,以便我可以將它導入到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
但是,如果跟蹤路由返回類似這樣的東西它存儲在.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";
};
感謝您的幫助和迴應!
請出示不工作 – Borodin 2013-03-06 01:42:14
原位缺口工作代碼的代碼如果(/(\ d +)\ s +(\ S +)\ s +(\ S +)\ s + ms \ s +(\ S +),則輸出「$ 1,$ 2,$ 3 ms,$ 4 ms,$ 5 ms \ n」 \ S + MS \ S +(\ S +)/); ,因爲只有traceroute只返回時間值而不是時間和IP值 – 2013-03-06 01:46:35