最後の行を表示するには、キーを押します。

最後の行を表示するには、キーを押します。

複数のフィールドを含むファイルがあります。

12345 some values here
67890 other values maybe
12345 different values here

...など。

見せたい最近各キーの行です。出力は次のようになります。

67890 other values maybe
12345 different values here

出力では、キーは一意でなければならず、値(行の残りの部分)はそのキーに対して最も最近表示された値でなければなりません。私はキーの最終的な順序に特に興味がありません。

GNU(またはPOSIX)ツールを使用してこれをどのように実行できますか?

ベストアンサー1

awk '{ data[$1] = $0 } END { for (key in data) print data[key] }' file

dataこれにより、最初のフィールドをキーとして配列の各行のデータが保存されます。同じ最初のフィールドを持つ別の行が見つかった場合は、そのキーの古いデータが上書きされます。

最後に、配列のすべてのデータを出力します。

改善されたメモリ効率:

sort -k1,1 -s file |
awk 'NR > 1 && $1 != key { print data } { data = $0; key = $1 } END { print data }'

ここでは、最初に安定したソートアルゴリズム()を使用して、最初の列でのみファイルをソートします-s。安定したソートアルゴリズムを使用することは、同じキーを持つ行が出力内の相対位置を変更しないことを意味しますsort

その後、コードはawk単に「現在のキー」とそのキーの最新のデータを追跡し、キーが変更されると(最後に)そのデータを印刷します。

おすすめ記事