Awk数组正在以意外顺序打印元素
我使用awk从数据集中捕获时间戳,并打印出与该时间戳相关联的值(内存) 下面的awk代码可以很好地实现这一点Awk数组正在以意外顺序打印元素,awk,Awk,我使用awk从数据集中捕获时间戳,并打印出与该时间戳相关联的值(内存) 下面的awk代码可以很好地实现这一点 awk ' /show memory compare start/ {getline start_time = $0; } /show memory compare end/ {getline
awk '
/show memory compare start/ {getline
start_time = $0;
}
/show memory compare end/ {getline
end_time = $0;
}
/mibd_interface/{
print start_time, $3, "\n" end_time, $4
}' snmpoutput.txt
Thu Sep 19 14:38:06.400 WIB 8670334
Thu Sep 19 14:40:56.123 WIB 8484152
Thu Sep 19 14:43:07.946 WIB 8369050
Thu Sep 19 14:45:27.916 WIB 8514825
Thu Sep 19 14:46:28.464 WIB 8446906
Thu Sep 19 14:50:10.422 WIB 8264885
Thu Sep 19 14:50:44.374 WIB 8264884
Thu Sep 19 14:55:05.760 WIB 8264960
将此数据放入数组并打印后,元素出现无序
在将此输出与上面的所需输出进行比较时,我在最右边的列中输入了显示顺序
awk '
/show memory compare start/ {getline
start_time = $0;
}
/show memory compare end/ {getline
end_time = $0;
}
/mibd_interface/{mem_stats[start_time]=$3; mem_stats[end_time]=$4} END {for (time in mem_stats) {printf "%s => %s\n",time,mem_stats[time]}}' snmpoutput.txt
Thu Sep 19 14:55:05.760 WIB => 8264960 8
Thu Sep 19 14:45:27.916 WIB => 8514825 4
Thu Sep 19 14:43:07.946 WIB => 8369050 3
Thu Sep 19 14:40:56.123 WIB => 8484152 2
Thu Sep 19 14:50:44.374 WIB => 8264884 7
Thu Sep 19 14:38:06.400 WIB => 8670334 1
Thu Sep 19 14:50:10.422 WIB => 8264885 6
Thu Sep 19 14:46:28.464 WIB => 8446906 5
数据集
(已发布示例,因为完整数据集太大)
一次迭代
xr_lab#show memory compare start
Thu Sep 19 14:38:06.400 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_start.out
xr_lab#
xr_lab#
xr_lab#show memory compare end
Thu Sep 19 14:40:56.123 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_end.out
xr_lab#
xr_lab#show memory compare report
Thu Sep 19 14:41:08.084 WIB
PID NAME MEM BEFORE MEM AFTER DIFFERENCE MALLOCS-NEW
-------------------------------------------------------------------------------
2550 sysdb_svr_local 7881443 7878256 -3187 87391
7582 mibd_interface 8670334 8484152 -186182 267657
xr_lab#show memory compare start
Thu Sep 19 14:43:07.946 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_start.out
xr_lab#
xr_lab#
xr_lab#
xr_lab#show memory compare end
Thu Sep 19 14:45:27.916 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_end.out
xr_lab#
xr_lab#
xr_lab#show memory compare report
Thu Sep 19 14:45:42.091 WIB
PID NAME MEM BEFORE MEM AFTER DIFFERENCE MALLOCS-NEW
-------------------------------------------------------------------------------
6777 ospf 24294569 24283592 -10977 227389
7582 mibd_interface 8369050 8514825 145775 126259
第二次迭代
xr_lab#show memory compare start
Thu Sep 19 14:38:06.400 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_start.out
xr_lab#
xr_lab#
xr_lab#show memory compare end
Thu Sep 19 14:40:56.123 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_end.out
xr_lab#
xr_lab#show memory compare report
Thu Sep 19 14:41:08.084 WIB
PID NAME MEM BEFORE MEM AFTER DIFFERENCE MALLOCS-NEW
-------------------------------------------------------------------------------
2550 sysdb_svr_local 7881443 7878256 -3187 87391
7582 mibd_interface 8670334 8484152 -186182 267657
xr_lab#show memory compare start
Thu Sep 19 14:43:07.946 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_start.out
xr_lab#
xr_lab#
xr_lab#
xr_lab#show memory compare end
Thu Sep 19 14:45:27.916 WIB
Successfully stored memory snapshot in /var/log/malloc_dump_memcmp_end.out
xr_lab#
xr_lab#
xr_lab#show memory compare report
Thu Sep 19 14:45:42.091 WIB
PID NAME MEM BEFORE MEM AFTER DIFFERENCE MALLOCS-NEW
-------------------------------------------------------------------------------
6777 ospf 24294569 24283592 -10977 227389
7582 mibd_interface 8369050 8514825 145775 126259
我能知道为什么元素打印出了问题,以及解决这个问题的最佳方法吗
谢谢。请尝试以下内容,因为缺少实际输入文件的样本,所以未对其进行测试 第一种解决方案:考虑到任何其他行的时间戳都不会相同,如果是这种情况,那么只需执行以下操作:
awk '
/show memory compare start/{
getline
start_time = $0;
b[++count]=start_time
}
/show memory compare end/{
getline
end_time = $0;
b[++count]=end_time
}
/mibd_interface/{
mem_stats[start_time]=$3
mem_stats[end_time]=$4
}
END{
for(i=1;i<=count;i++){
printf "%s => %s\n",b[i],mem_stats[b[i]]
}
}' Input_file
输出如下:
请您尝试以下内容,因为缺少实际输入文件的样本,所以未对其进行测试 第一种解决方案:考虑到任何其他行的时间戳都不会相同,如果是这种情况,那么只需执行以下操作:
awk '
/show memory compare start/{
getline
start_time = $0;
b[++count]=start_time
}
/show memory compare end/{
getline
end_time = $0;
b[++count]=end_time
}
/mibd_interface/{
mem_stats[start_time]=$3
mem_stats[end_time]=$4
}
END{
for(i=1;i<=count;i++){
printf "%s => %s\n",b[i],mem_stats[b[i]]
}
}' Input_file
输出如下:
我能知道为什么元素打印出了问题,以及解决这个问题的最佳方法吗
该报告的内容如下:
awk语言提供用于存储数字或字符串的数组。数组不需要声明。它们最初应为空,其大小应动态变化下标或元素标识符是字符串,提供了类型的关联数组功能
它将迭代,以未指定的顺序将数组的每个索引分配给变量
因此,我们知道awk中的数组是一个,只不过是一个键值对组合。编程界的一个经典示例是二叉树,如C++的std::map
。通常,为了有效地遍历和搜索数组,需要进行排序,但是标准awk没有为我们提供定义这种排序的选项。该标准让实现awk的人可以自由选择密钥顺序。这也是为什么它声明for(数组中的变量)
将以未指定的顺序遍历数组
另一方面,GNU awk允许在全局级别使用数组变量定义键顺序,在局部级别使用函数定义键顺序。后者将数组source
的键存储在一个整数索引数组dest
中。后者被填充,使得键的顺序由函数how
(dest[1]
定义
我能知道为什么元素打印出了问题,以及解决这个问题的最佳方法吗
该报告的内容如下:
awk语言提供用于存储数字或字符串的数组。数组不需要声明。数组最初应为空,并且其大小应动态更改。下标或元素标识符是字符串,提供了一种类型的关联数组功能
它将迭代,以未指定的顺序将数组的每个索引分配给变量
由此可知,awk中的数组只不过是一个键值对组合。编程世界中的一个经典示例是二叉树,如C++的std::map
。通常,需要对数组进行排序,以有效地遍历和搜索数组,但标准awk并没有给我们定义这样或那样的组合的选项该标准让实现awk的人可以自由选择键顺序。这也是为什么它声明for(数组中的变量)
将以未指定的顺序遍历数组的原因
另一方面,GNU awk允许使用数组变量在全局级别上定义键顺序,使用函数在局部级别上定义键顺序。后者将数组source
的键存储在一个整数索引数组dest
中。后者被填充,以便键的顺序由函数如何
(dest[1]
使用如何定义您可以检查我的解决方案一次并让我知道这是否对您有帮助吗?您可以检查我的解决方案一次并让我知道这是否对您有帮助吗?
for (variable in array)
{ key_order[++c]="key"
data["key"] = "value" }
END { for(i=1;i<=c;++i) print data[key_order[i]] }