2010-07-31 100 views
2

我有如下所示的文件。我必须找到每个时间戳的最大值。所以,我一定要找到最大(2434,2681,2946,1626),MAX(3217,4764,4501,3372)等等...(因为这些数字都有一个共同的时间戳)如何找到最大的元素并将其存储在数组中

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 

回答

1

你混合AWK和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 
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 
+0

非常感谢@ghostdog! – 2010-07-31 02:43:40

+0

@Sharat:如果这可以正确回答您的问题,请点击投票数下面的复选标记接受它。 – 2010-07-31 03:22:19

相关问题