次の形式のファイルがあります
2011-12-01 user1 access1
2011-12-01 user1 access2
2011-12-01 user2 access2
2011-12-01 user4 access2
2011-12-02 user1 access1
2012-01-01 user3 access1
2012-01-01 user4 access2
すべてのユーザーに対して最終日を表示する出力が欲しいので、
2011-12-02 user1 access1
2011-12-01 user1 access2
2011-12-01 user2 access2
2012-01-01 user3 access1
2012-01-01 user4 access2
私はこのようなものを試しました:
less myfile.txt | sort -k1r | uniq -f 1 | sort -b -k1
しかし、それは正しく機能していないようです。
ご協力ありがとう御座います!
私はあなたが欲しいと思います
cat myfile.txt| sort -k1 -r | sort --unique --stable -k2,3
(上記のcat
に関する私のコメントを参照してください)。最初の並べ替えでは、最新の日付が一番上に表示されます。 2番目の並べ替えでは、ユーザー+アクセスで並べ替えますが、--stable
を指定すると、同じユーザー+アクセスの組み合わせを持つ行の以前の順序が維持されます。つまり、最新のものが一番上に表示されます。 --unique
を指定すると、ユーザーとアクセスの組み合わせが等しい実行の最初の行のみが表示されます。 (それを| uniq -f1
に置き換えることができます、もしそれがたまたまGNUあなたのソートが持っていない拡張子であるなら。)
もうすぐです。sort
オプションを調整する必要があります。
sort -k2,2 -k1,1r myfile.txt | uniq -f1
つまり、ユーザーで並べ替えて日付を逆にし、ユーザーとアクセスの最初の出現のみを残します。
awk
を1回呼び出すだけで実行したい場合
awk '($1 > a[$2,$3]){a[$2,$3]=$1}END{for(x in a){split(x,b,SUBSEP);print a[x],b[1],b[2]}}' in