2010-07-31 3 views
2

아래와 같은 파일이 있습니다. 각 타임 스탬프의 최대 값을 찾아야합니다. 그래서 나는 등 최대 (2434, 2681, 2946, 1626), 최대 (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 

I를 찾을 수있다 이 코드를 작성했지만 오류가 발생했습니다. 누군가 나를 교정 할 수 있습니까? 덕분에 사전에

#!/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와 배쉬 구문과 각 오류를 혼합하고 있습니다.

#!/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 :

여기에 순수 배쉬 솔루션입니다! –

+0

@Sharat : 귀하의 질문에 대한 답변이 적절하다면 투표 수 아래의 체크 표시를 클릭하여 동의하십시오. –

관련 문제