Awk:在匹配条件后删除重复行而不进行排序
我有一个设备列表,在保留顺序和匹配条件的同时,我需要删除重复的设备(只保留第一次出现的设备)。在本例中,我要查找一个特定的字符串,然后打印带有设备名称的字段。以下是来自sar应用程序的一些原始数据示例:Awk:在匹配条件后删除重复行而不进行排序,awk,uniq,Awk,Uniq,我有一个设备列表,在保留顺序和匹配条件的同时,我需要删除重复的设备(只保留第一次出现的设备)。在本例中,我要查找一个特定的字符串,然后打印带有设备名称的字段。以下是来自sar应用程序的一些原始数据示例: 10:02:01 AM sdc 0.70 0.00 8.13 11.62 0.00 1.29 0.86 0.06 10:02:01 AM sda 0.00 0.00
10:02:01 AM sdc 0.70 0.00 8.13 11.62 0.00 1.29 0.86 0.06
10:02:01 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:02:01 AM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdc 1.31 3.73 99.44 78.46 0.02 17.92 0.92 0.12
Average: sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:05:01 AM sdc 2.70 0.00 39.92 14.79 0.02 5.95 0.31 0.08
10:05:01 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:05:01 AM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
10:06:01 AM sdc 0.83 0.00 10.00 12.00 0.00 0.78 0.56 0.05
11:04:01 AM sda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
11:04:01 AM sdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: sdc 0.70 2.55 8.62 15.91 0.00 1.31 0.78 0.05
Average: sda 0.12 0.95 0.00 7.99 0.00 0.60 0.60 0.01
Average: sdb 0.22 1.78 0.00 8.31 0.00 0.54 0.52 0.01
下面将给出包含单词“average”的行中的设备列表,但它会对输出进行排序:
sar -dp | awk '/Average/ {devices[$2]} END {for (device in devices) {print device}}'
sda
sdb
sdc
下面给出了我想要的(来自的命令):
也许我遗漏了一些非常明显的东西,但我不知道如何在一个awk命令中做到这一点,即不将第一个awk的输出管道化到第二个awk。您可以:
sar -dp | awk '/Average/ && !devices[$2]++ {print $2}'
sdc
sda
sdb
问题在于(设备中的设备)的此部分。由于某些原因,的会随机输出。
我已经阅读了很长一段关于为什么有些地方没有链接的复杂信息 您可以执行以下操作:
sar -dp | awk '/Average/ && !devices[$2]++ {print $2}'
sdc
sda
sdb
awk '/Average/ && !devices[$2]++ {print $2}' sar.in
问题在于(设备中的设备)
的此部分。由于某些原因,的会随机输出。
我已经阅读了很长一段关于为什么有些地方没有链接的复杂信息
awk '/Average/ && !devices[$2]++ {print $2}' sar.in
您只需要将这两个测试结合起来。唯一需要注意的是,在原始输入中,整行是原始输入的字段2,因此需要将$0
替换为$2
您只需要将这两个测试结合起来。唯一需要注意的是,在原始输入中,整行是原始输入的第二个字段,因此您需要将$0
替换为$2
这看起来很像我的帖子:)这看起来很像我的帖子:)据我所知,awk对从数组中检索到的键的顺序没有任何声明。虽然在awk 4中,您可以通知它检索键时要使用的排序(但我不知道“输入顺序”是否是一个选项)。
中的操作符按照元素在内存中的存储顺序从数组中检索元素,即哈希算法以任何顺序排列元素。如果需要按特定顺序遍历数组,则需要确定顺序(插入顺序?字母顺序?数字顺序?按元素?按索引?其他什么?),并以某种方式编程该顺序。使用GNU awk,您可以通过填充PROCINFO[“sorted_in”]
来分配订单,请参阅。@EdMorton感谢您的帮助。我的记忆有点有限,出于某种原因,我开始自己删除东西,而不告诉我:)这是链接到
@Jotne告诉我它的排序\ u。我在学校学过法语,几年前开始学西班牙语,我最终意识到这只是为了腾出空间而把法语从我的大脑中挤出。最终的结果是,我现在两种语言都不会说,而且我几乎不懂英语……据我所知,awk对从数组中检索到的键的顺序没有任何要求。虽然在awk 4中,您可以通知它检索键时要使用的排序(但我不知道“输入顺序”是否是一个选项)。
中的操作符按照元素在内存中的存储顺序从数组中检索元素,即哈希算法以任何顺序排列元素。如果需要按特定顺序遍历数组,则需要确定顺序(插入顺序?字母顺序?数字顺序?按元素?按索引?其他什么?),并以某种方式编程该顺序。使用GNU awk,您可以通过填充PROCINFO[“sorted_in”]
来分配订单,请参阅。@EdMorton感谢您的帮助。我的记忆有点有限,出于某种原因,我开始自己删除东西,而不告诉我:)这是链接到
@Jotne告诉我它的排序\ u。我在学校学过法语,几年前开始学西班牙语,我最终意识到这只是为了腾出空间而把法语从我的大脑中挤出。最终的结果是,我现在两种语言都不会说了,只是勉强掌握了英语。。。。