AWK - Return 基于共同特征的输入中的最小值
AWK - Return minimum value in input based on common feature
我有以下输入:
...
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 = #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=+0; a[]=a[]?(m<a[]?m:a[]):m} END{for (v in a) {printf "%s\nMin: %sms\n\n", v,a[v]}}' file
解释:
m=+0
- 这使得 5ms
到 5
整数部分。
a[]?(m<a[]?m:a[]):m
- 一开始 a[]
的索引 </code> 将具有空值,因此将 <code>m
设置为初始值。下一次,a[]
将有价值,然后对 m<a[]
. 进行检查
输入文件:
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[]++' | sort | xargs -n 1 | sed 's/^[0-9]/ min: &/g'
MSG1
min: 5ms
MSG2
min: 1ms
MSG3
min: 2ms
我有以下输入:
...
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 = #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=+0; a[]=a[]?(m<a[]?m:a[]):m} END{for (v in a) {printf "%s\nMin: %sms\n\n", v,a[v]}}' file
解释:
m=+0
- 这使得5ms
到5
整数部分。a[]?(m<a[]?m:a[]):m
- 一开始a[]
的索引</code> 将具有空值,因此将 <code>m
设置为初始值。下一次,a[]
将有价值,然后对m<a[]
. 进行检查
输入文件:
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[]++' | sort | xargs -n 1 | sed 's/^[0-9]/ min: &/g'
MSG1
min: 5ms
MSG2
min: 1ms
MSG3
min: 2ms