我编写了一些 shell 脚本,它们运行到主机的跟踪路由,然后将它们保存到一个文件中。这完美地工作.log
并按预期将所有数据输出到文件。
然后我继续编写了一个简单的 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
但是,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";
};
感谢您的所有帮助/回复!