Как найти самый большой элемент и сохранить его в массиве - PullRequest
2 голосов
/ 31 июля 2010

У меня есть файл, как показано ниже. Мне нужно найти максимальное значение для каждой отметки времени.Поэтому мне нужно найти max (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   

Ответы [ 2 ]

3 голосов
/ 31 июля 2010
$ 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 голос
/ 31 июля 2010

Вы смешиваете синтаксис 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...