カレンダーを表すこのファイルがあります。各ファイルには正確な日付と時刻があり、次に名前イベントとメモがあります。
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
を試してみましたが、正しく機能しませんでした。私に何ができる?
最も簡単なコマンドは
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
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