代码之家  ›  专栏  ›  技术社区  ›  Sharat Chandra

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

  •  2
  • Sharat Chandra  · 技术社区  · 14 年前

    我有如下所示的文件。我必须找到每个时间戳的最大值。所以我必须找到最大值(2434268129461626),最大值(321747645013372)等等…(因为这些数字有一个共同的时间戳)

    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 回复  |  直到 14 年前
        1
  •  1
  •   Dennis Williamson    14 年前

    您混合了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
    
        2
  •  3
  •   ghostdog74    14 年前
    $ 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