Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
shell中的复杂查询_Shell_Debian - Fatal编程技术网

shell中的复杂查询

shell中的复杂查询,shell,debian,Shell,Debian,我有一个包含许多条目的文件,如 1365593957.914 172.27.15.16 593 1365593969.237 172.27.15.31 1149 1365593979.239 172.27.15.33 5696 1365593989.242 172.27.15.31 1338 1365593999.344 172.27.15.33 21406 这些是时间戳ip数据大小 如果时间戳介于$tp1和$tp2之间,我需要每个ip的所有数据量之和。我尝试逐行读取文件,然后在每行应用awk

我有一个包含许多条目的文件,如

1365593957.914 172.27.15.16 593
1365593969.237 172.27.15.31 1149
1365593979.239 172.27.15.33 5696
1365593989.242 172.27.15.31 1338
1365593999.344 172.27.15.33 21406
这些是时间戳ip数据大小

如果时间戳介于
$tp1
$tp2
之间,我需要每个ip的所有数据量之和。我尝试逐行读取文件,然后在每行应用awk来检查时间戳的范围,但它不起作用。另外,我也不知道如何将它们分类相加。

awk-vtp1=$tp1-vtp2=$tp2'$1>tp1&&1awk -v tp1=$tp1 -v tp2=$tp2 '$1 > tp1 && $1 < tp2 {
    total[$2] += $3;
}
END {
    for (ip in total)
         print "IP:", ip, "=>", total[ip];
}'
总额[$2]+=$3; } 结束{ 用于(ip总数) 打印“IP:”,IP“=>”,总[IP]; }' 看起来很简单。如果这对你不起作用,它在什么方面不起作用

编辑:重新格式化。缩进被忽略了,不知道为什么

说明:

  • -v tp1=$tp1
    表示“在awk中创建名为tp1的变量,并使用名为tp1的shell变量的值
  • $1>tp1&$1
    表示“仅当第一个字段的值大于tp1的值且小于tp2的值时才执行此代码块
  • total[$2]+=$3
    使用第二个字段(IP地址)的值作为数组索引,隐式声明名为“tota”的数组,并添加第三个字段的值
  • AWK将迭代输入中的所有记录,默认记录为单行文本。对于每条记录,如果条件有效,将执行上述代码
  • END
    标识在处理完所有记录后执行的代码块,而不是针对每个(匹配的)输入记录执行
  • for(ip总计)
    标识另一个迭代器:对于名为
    total
    的数组中存储的每个值,将数组索引的名称分配给名为
    ip
    的变量,并执行关联的代码块
  • 在这种情况下,关联的代码块是
    print“IP:,IP,=>,total[IP]
    ,它打印字符串“IP:”、一个空格、名为
    IP
    的变量(这是一个IP地址,用作数组索引名)的值、另一个空格、字符串“=>”、另一个空格以及存储在数组中的值,这些值由IP地址索引

有问题吗?

重新格式化。一个恰当的解释在评论中是不合适的,你还需要它吗?如果你也可以不加评论地解释它,那就行了。非常感谢。