ファイルログの最後の3つの日付を取得するには?

ファイルログの最後の3つの日付を取得するには?

次の出力の最後の3つの日付を印刷するには:

User;month/day/year

    user1:01/01/2015
    user1:01/01/2015
    user1:01/01/2015
    ...
    user1:01/09/2018
    user1:01/08/2018
    user1:01/07/2018
    user1:01/04/2016
    user1:01/02/2016
    user1:01/01/2016

この場合(2018年基準)

編集する:

次のawkコマンドがあります。

awk '{ print $1":" substr( $0,285,291 )}' $file_input | awk '{ print $1}' | sort -n -r

希望の出力:

    user1:01/09/2018
    user1:01/08/2018
    user1:01/07/2018

答え1

ここではYYYY、部品が最初に並べ替えられ、次にmm/dd語彙ごとに整列されます。

これは、それぞれ2番目の区切り文字フィールドの文字7〜10文字1〜5です。したがって、次のようになります。:

<file sort -r -b -t: -k2.7,2.10 -k 2.1,2.5 | head -n 3

-b周囲のスペースを許可(および無視)するには、ここに1つを追加してください:

答え2

次のソートを試してください。

sort -rt/ -k3n -k1.11n -k2n < input | head -3

これにより、3つの主要なフィールドと区切り文字に基づいて/行がソートされます。最初の年、月(フィールド1、ユーザー名とコロンをスキップ)、フィールド2 - すべてが数値順に並べ替えられます。tail -3最後(最近)の3行/日付のみを出力します。

関連情報