0

次のような入力があります。

LineA parameter1 parameter2 56  
LineB parameter1 parameter2 87
LineB parameter1 parameter2 56
LineB parameter1 parameter2 90
LineC parameter1 parameter2 40  

各行を印刷したいのですが、最初の列 ( $1) が重​​複している場合は、最後の列 ( $4) の値が最も高い行のみを印刷します。

したがって、出力は次のようになります。

LineA parameter1 parameter2 56
LineB parameter1 parameter2 90
LineC ...
4

3 に答える 3

2

以下を試してください(フィールド4が全体で> = 0であると仮定)

配列bは、フィールド 1 の一意の値に対するフィールド 4 の最大値を追跡するために使用されます。配列a(フィールド 1 でキー指定) には、対応するレコードが含まれます。各レコードが処理されると、次の場合に、レコードが配列に追加されa、フィールド 4 が配列に追加されbます。bフィールド 1. 最後に、配列aが出力されます。

 awk '$4 > b[$1] {a[$1] = $0; b[$1] = $4}
 END{for (x in a) {print a[x]}}'
于 2013-06-25T18:09:13.870 に答える