我有以下输入:
...
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
但是我无法从输入数据中提取最小值。我知道如何逻辑地获取数据,但实际编码是另一回事。任何和所有帮助将不胜感激。
答案 0 :(得分:2)
您可以试试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
<强>解释强>
m=$2+0
- 这使5ms
成为5
整数部分。a[$1]?(m<a[$1]?m:a[$1]):m
- 首先a[$1]
的{{1}}索引的空值为空,因此将$1
设置为初始值。下次m
会有价值,然后对a[$1]
进行检查。答案 1 :(得分:1)
cat data
MSG1 10ms
MSG2 20ms
MSG3 25ms
MSG1 5ms
MSG3 2ms
MSG2 1ms
#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