web-dev-qa-db-ja.com

日付と時刻に従って行を並べ替える

カレンダーを表すこのファイルがあります。各ファイルには正確な日付と時刻があり、次に名前イベントとメモがあります。

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

正しい順序で並べ替えられたイベントを印刷する必要があります。

grepawkを試してみましたが、正しく機能しませんでした。私に何ができる?

2
StillLearning

最も簡単なコマンドは

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
4
jimmij

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
2
Jeff Schaller