如何找到最大的元素并将其存储在数组中

时间:2010-07-31 02:24:09

标签: bash awk

我的文件如下所示。我必须找到每个时间戳的最大值。所以我必须找到最大值(2434,2681,2946,1626),最大值(3217,4764,4501,3332)等等......(因为这些数字有一个共同的时间戳)

Timestamp  value

1280449531 2434
1280449531 2681
1280449531 2946
1280449531 1626
1280449532 3217
1280449532 4764
1280449532 4501
1280449532 3372
1280449533 4129
1280449533 6937
1280449533 6423
1280449533 4818
1280449534 4850
1280449534 8980
1280449534 8078
1280449534 6788
1280449535 5587
1280449535 10879
1280449535 9920
1280449535 8146
1280449536 6324
1280449536 12860
1280449536 11612
1280449536 9867

我写了这段代码,但却收到了错误。有人可以纠正我吗?提前致谢

#!/bin/bash
awk '{ if [ temp -ne $1 ] 
       then temp = $1; big[$1] = $2
       fi
       elif [temp -eq $1] then if [$2 gt $big[$1] ] big[$1] = $2 ; fi 
       fi

     }' plots.dat   

2 个答案:

答案 0 :(得分:3)

$ awk '$2>values[$1]{values[$1]=$2}END{for(i in values)print values[i],i } ' file
2946 1280449531
4764 1280449532
6937 1280449533
8980 1280449534
10879 1280449535
12860 1280449536

答案 1 :(得分:1)

你混合使用AWK和Bash语法,每个语法都有错误。

这是一个纯粹的Bash解决方案:

#!/bin/bash
while read -r timestamp value
do
    if (( value > ${array[timestamp]} + 0 ))
    then
        array[timestamp]=$value
    fi
done < plots.dat
for i in ${!array[@]}
do
    echo "$i ${array[i]}"
done