カレンダーを表すこのファイルがあります。各ファイルには正確な日付と時刻が含まれ、その後にイベント名と説明が表示されます。
06-12-2016,12:00,gym,leg day
05-04-2018,12:09,gym,hands
09-08-2019,13:08,movies,horror
05-04-2019,14:07,gym,hands
23-03-2018,16:47,dance class
25-04-2019,13:29,dance class
05-12-2017,14:45,songwriting
正しい順序でソートされたイベントを印刷する必要があります。
grep
試してみましたがawk
正常に動作しません。どうですか?
答え1
私は最も簡単なコマンドが次のようになると思います。
sort -t- -k3.1,3.4 -k2,2 file
これは、3番目のフィールドの4文字をソートし、2番目のフィールドをソートして関係を解決します。それでもタイが解決しない場合は、最初のフィールドから始まる他のすべてのフィールドを比較して、順序が自動的に決定されます。
すべてのソートはアルファベット順に行われ、数字は正の整数であるため、追加の数字を追加することはn
重要ではありません。
テストサンプル:
06-12-2016,12:00,gym,leg day
05-04-2018,12:09,gym,hands
09-08-2019,13:11,movies,horror
09-08-2019,13:09,movies,horror
09-08-2019,13:08,movies,horror
08-08-2019,13:09,movies,horror
05-04-2019,14:07,gym,hands
23-03-2018,16:47,dance class
25-04-2019,13:29,dance class
05-12-2017,14:45,songwriting
結果の並べ替え:
06-12-2016,12:00,gym,leg day
05-12-2017,14:45,songwriting
23-03-2018,16:47,dance class
05-04-2018,12:09,gym,hands
05-04-2019,14:07,gym,hands
25-04-2019,13:29,dance class
08-08-2019,13:09,movies,horror
09-08-2019,13:08,movies,horror
09-08-2019,13:09,movies,horror
09-08-2019,13:11,movies,horror
答え2
1つの方法は、すべてのソートフィールドを手動で選択することです。
sort -t, -k 1.7,1.10n -k 1.4,1.5n -k 1.1,1.2n -k 2.1,2.2n -k 2.4,2.5n input
これにより、カンマ区切りのフィールドに基づいて行が分割され、年、月、日、時、および分の位置を使用して数値でソートされます。出力例:
06-12-2016,12:00,gym,leg day
05-12-2017,14:45,songwriting
23-03-2018,16:47,dance class
05-04-2018,12:09,gym,hands
05-04-2019,14:07,gym,hands
25-04-2019,13:29,dance class
09-08-2019,13:08,movies,horror