gpt4 book ai didi

awk 按多列分组并使用非主键打印最大值

转载 作者:行者123 更新时间:2023-12-01 15:54:05 24 4
gpt4 key购买 nike

我是这个网站的新手,正在尝试学习 awk。我试图找到 field3 的最大值,按 field1 分组并打印所有具有最大值的字段。 Field 2 包含时间,这意味着对于每个 item1 有 96 个 field2,field3 和 field4 的值

输入文件:(逗号分隔)

item1,00:15,10,30
item2,00:45,20,45
item2,12:15,30,45
item1,00:30,20,56
item3,23:00,40,44
item1,12:45,50,55
item3,11:15,30,45

期望的输出:

item1,12:45,50,55
item2,12:15,30,45
item3,11:15,30,45

到目前为止我尝试了什么:

BEGIN{
FS=OFS=","}
{
if (a[$1]<$3){
a[$1]=$3}
}
END{
for (i in a ){
print i,a[i]
}

但这只会打印

item1,50
item2,30
item3,30

但我需要打印相应的 field2 和 field4 以及所需输出中显示的最大值。请帮忙。

最佳答案

这里的问题是你没有存储整行,所以当你检查最终数据时,没有完整的数据要打印。

你需要做的是使用另一个数组,比如data[index]=full line:

BEGIN{
FS=OFS=","}
{
if (a[$1]<$3){
a[$1]=$3
data[$1]=$0} # store it here!
}
END {
for (i in a )
print data[i] # print it here
}

或者作为单行:

$ awk 'BEGIN{FS=OFS=","} {if (a[$1]<$3) {a[$1]=$3; data[$1]=$0}} END{for (i in a) print data[i]}' file
item1,12:45,50,55
item2,12:15,30,45
item3,23:00,40,44

关于awk 按多列分组并使用非主键打印最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37523781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com