我想绘制以下数据集。
+---------------+-----------+-------------+-----+----+----+--------------------+-------------------+----+----+----+----+--------------------+--------------------+------------------+--------------------+-----------------+------+
| time_stamp_0|sender_ip_1|receiver_ip_2|count|rank| xi| pi| r| ip5| ip4| ip3| ip2| variance| entropy| pre_chi_square| chi_square| total_chi_square|attack|
+---------------+-----------+-------------+-----+----+----+--------------------+-------------------+----+----+----+----+--------------------+--------------------+------------------+--------------------+-----------------+------+
|10:37:37.000985| 10.0.0.3| 10.0.0.1| 9345| 1|1796|1.070090957731407...|0.19218833600856072|1211|1157|4812|1796|6.982982177427692E-5|9.783410080138751E-4|3.3954177346722574|0.001890544395697248|13.58167093868903| 1|
|10:37:37.000995| 10.0.0.3| 10.0.0.1| 9345| 2|1796|2.140181915462814...|0.19218833600856072|1211|1157|4812|1796|3.497253089848578...|0.001808335909968907| 17.00510593066335|0.009468321787674473|13.58167093868903| 1|
|10:37:37.001002| 10.0.0.2| 10.0.0.1| 9345| 3|1796|3.210272873194221...|0.19218833600856072|1211|1157|4812|1796|8.436389877417202E-4| 0.00258233850119472|41.021252923981834|0.022840341271704808|13.58167093868903| 1|
我需要有一个图表,只显示“time_stamp_0”的“等级”,仅适用于sender_ip_1 =“10.0.0.3”。 我有以下代码:
set timefmt '%H:%M:%S'
set xdata time
set format x '%H:%M:%S'
//I have a problem with the below code
plot "test.txt" using 1:($2=="10.0.0.3"?$5:1/0)
然而绘制的图表不正确。 事实上,似乎没有过滤适用于数据,图表与没有过滤的图表相同!
我应该提一下,数据框位于文件(test.txt)中,并且没有任何标题。
你能帮帮我吗?答案 0 :(得分:2)
使用eq
进行字符串相等性检查,使用strcol
获取列的字符串值:
plot "test.txt" using 1:(strcol(2) eq "10.0.0.3" ? $5 : 1/0)
答案 1 :(得分:1)
您遇到两个问题:
eq
,而不是==
。我没有看到从Gnuplot中解决第二个问题的方法。然而,在绘制为您处理条件之前,您可以通过像AWK之类的东西来管道:
plot "<awk '{print $1, ($2==\"10.0.0.3\" ? $5 : \"nan\")}' test.dat" u 1:2
(请注意,您仍需要处理ASCII表格式,例如,通过SED删除所有|
个字符。)