我的连接日志文件结构如下:
主机名 方向 时间戳 bps
这是我的日志文件的片段:
www.youtube.com DOWNLOAD 1479897661131903 23508910
www.youtube.com UPLOAD 1479897661131922 735
fonts.gstatic.com DOWNLOAD 1479897660289990 527
ssl.gstatic.com UPLOAD 1479897660152435 2094
fonts.gstatic.com DOWNLOAD 1479897660290973 6662177
我想根据时间戳和主机名对其进行排序:我尝试过
sort -k 3 -o sortedTimestamps.log connectionLog.txt
结果是
ssl.gstatic.com UPLOAD 1479897660152435 2094
fonts.gstatic.com DOWNLOAD 1479897660289990 527
fonts.gstatic.com DOWNLOAD 1479897660290973 6662177
www.youtube.com DOWNLOAD 1479897661131903 23508910
www.youtube.com UPLOAD 1479897661131922 735
现在,这只是一个示例:行数越来越多,目前,sort
日志文件只是按时间戳排序。由于我需要绘制此图,因此我希望根据hostname
和拥有不同的日志文件direction
,其中包含timestamp
和bps
。
最终结果是每个都有一个日志文件hostname
:
www.youtube.com_DOWNLOAD_log
,
www.youtube.com_UPLOAD_log
,
fonts.gstatic.com_DOWNLOAD_log
,
fonts.gstatic.com_UPLOAD_log
等等;每个日志文件应仅包含两列,已排序timestamp
及其相应的bps
.
例如:www.youtube.com_DOWNLOAD_log
包含:
timestamp1 bps1
timestamp2 bps2
timestamp3 bps3
...
将其绘制在图表上,X 轴为timestamp
,Y 轴为bps
。我会将它们全部绘制在一起,看看bps
不同连接的时间如何变化。
PS:这是我第一次尝试可视化数据,因此可能有一种更智能的方法来绘制像我的结构一样的日志文件,但由于这里的问题应该回答而不是讨论,请帮助我将我的日志文件拆分为多个日志文件,每个主机名方向一个。
编辑(2):感谢 Kalavan,这是我的脚本:
哦,管子!哦,Bash 的力量!我喜欢它!这是我的完整脚本:
#!/bin/bash
echo -e "\nCleaning previous log files...\n"
rm *.log
# File name: HOSTNAME_DIRECTION.log
sort -k1 -k3n connectionLog.txt | awk '{print $3 " " $8 >> $1"_"$2".log"}'
to_plot_upload_files="plot "
to_plot_download_files=" plot "
for file in $(ls *UPLOAD.log); do
to_plot_upload_files="$to_plot_upload_files \"$file\" using 1:2 with lines, "
done
for file in $(ls *DOWNLOAD.log); do
to_plot_download_files="$to_plot_download_files \"$file\" using 1:2 with lines, "
done
echo $to_plot_upload_files | gnuplot -persist
echo $to_plot_download_files | gnuplot -persist
答案1
对于初学者来说,尝试这样的事情。如果适合您,您可以进一步调整它:
sort -k1 -k3n connectionLog.txt | awk '{print $1 " " $3 " " $4 >> $1".log"}'
编辑:
我错过了您不希望日志中包含主机名。省略打印第一个字段 ($1)。