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