AWK-基于公共特征返回输入中的最小值
我有以下意见:AWK-基于公共特征返回输入中的最小值,awk,gawk,Awk,Gawk,我有以下意见: ... MSG1 10ms MSG2 20ms MSG3 25ms MSG1 5ms MSG3 2ms MSG2 1ms ... 我希望得到如下输出: MSG1 Min: 5ms MSG2 Min: 1ms MSG3 Min: 2ms 到目前为止,我所拥有的代码,其布局如下所示: #!/usr/bin/gawk -f BEGIN { print "Testing" } #End of BEGIN { #Start of MID key =
...
MSG1 10ms
MSG2 20ms
MSG3 25ms
MSG1 5ms
MSG3 2ms
MSG2 1ms
...
我希望得到如下输出:
MSG1
Min: 5ms
MSG2
Min: 1ms
MSG3
Min: 2ms
到目前为止,我所拥有的代码,其布局如下所示:
#!/usr/bin/gawk -f
BEGIN {
print "Testing"
} #End of BEGIN
{ #Start of MID
key = $1 #Message Extracted 10 Total
min = 100
} #End of MID
END {
for (MSG in MSG_TYPE) {
print MSG
print "MIN: "min
print "\n"
}
} #End of END
但我无法从输入数据中提取最小值。我知道如何从逻辑上获取数据,但实际上编码是另一回事。非常感谢您提供的任何帮助。您可以尝试此
awk
:
awk '{m=$2+0; a[$1]=a[$1]?(m<a[$1]?m:a[$1]):m} END{for (v in a) {printf "%s\nMin: %sms\n\n", v,a[v]}}' file
awk'{m=$2+0;a[$1]=a[$1]?(m你可以试试这个awk
:
awk '{m=$2+0; a[$1]=a[$1]?(m<a[$1]?m:a[$1]):m} END{for (v in a) {printf "%s\nMin: %sms\n\n", v,a[v]}}' file
awk'{m=$2+0;a[$1]=a[$1]?(mInput文件:
命令:
输入文件:
命令:
谢谢,但我真的希望它成为上述脚本的一部分,因为这是已请求的脚本的一部分。添加了解释。解决了它。我必须将初始循环置于结束
块之外,然后只打印a[v]
谢谢,但我真的希望它成为上述脚本的一部分,因为这是已请求的脚本的一部分。添加了解释。解决了它。我必须将初始循环置于结束
块之外,然后只打印a[v]
请您解释一下awk
部分的工作原理好吗?@GlennLynam:如果还没有看到这行,请打印它,然后在任何情况下增加看到的计数器ahh好的,谢谢。如果我想在示例中的脚本中实现它,我该怎么做?在上面的解决方案中,只需替换“数据”使用您的文件。它应该可以工作。或者您从其他命令而不是文件中获取数据,然后按如下方式运行:INPUT_SOURCE | sort-g-k2 | awk'\!seen[$1]+'| sort | xargs-n1 | sed's/^[0-9]/min:&/g'请您解释一下awk
部分是如何工作的吗?@GlennLynam:如果还没有看到这行,请打印它,然后在任何情况下增加看到的计数器ahh好的,谢谢。如果我想在示例中的脚本中实现它,我会怎么做?在上面的解决方案中,只需替换“数据”使用您的文件。它应该可以工作。或者您从其他命令而不是文件中获取数据,然后按如下方式运行:INPUT_SOURCE | sort-g-k2 | awk'\!seen[$1]+'| sort | xargs-n1 | sed's/^[0-9]/min:&/g'
#List all the files with minimum values
#Print only first occurrence of those files.
#Print values below to file name
#Print keyword "Min:"
sort -g -k2 data | awk '\!seen[$1]++' | sort | xargs -n 1 | sed 's/^[0-9]/ min: &/g'
MSG1
min: 5ms
MSG2
min: 1ms
MSG3
min: 2ms