我已经编写了一些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