日付に基づいて行を並べ替える

日付に基づいて行を並べ替える

次の形式のテキストファイルがあり、日付に基づいて行を並べ替える必要があります。これを行う簡単な方法はありますか(好ましくはbashで)?

2013-May-30     2
2013-May-21     10
2013-Jun-27     8
2013-Jun-18     9
2013-Jun-09     17
2013-May-20     21
2013-Jun-10     1
2013-Jun-01     2
2013-Aug-09     6
2013-Aug-08     5
2013-Aug-07     2
...

答え1

sortGNUにフィールドを別の文字(あなたのダッシュ)に分割するように指示すると、-ソートが簡単です。

$ sort -n -t"-" -k1 -k2M -k3 file.txt

はい

$ sort -n -t"-" -k1 -k2M -k3 file.txt
2013-May-20     21
2013-May-21     10
2013-May-30     2
2013-Jun-01     2
2013-Jun-09     17
2013-Jun-10     1
2013-Jun-18     9
2013-Jun-27     8
2013-Aug-07     2
2013-Aug-08     5
2013-Aug-09     6

引用する

答え2

ソートがGNUソートではなく、月名によるソートをサポートしていない場合は、その月名をソートできる名前sortに変換する必要があります。sort

sed 's/$/-Jan1Feb2Mar3Apr4May5Jun6Jul7Aug8Sep9Oct10Nov11Dec12/
     s/-\(...\)\(.*\)-.*\1\([0-9]*\)[^-]*$/-\3\1\2/' |
  sort -nt- -k1 -k2 -k3 |
  sed 's/-./-/'

答え3

まさにここに。次のことができます。

sort -k 2,2n -k 3
指定された列番号を使用してデータをソートします。オプション -k 2,2n -k 3 は各列をソートします。まず、2番目の列(日付mmフィールド)を並べ替えてから、3番目の列(日)を並べ替えます。

より多くの情報を見ることができますここ

関連情報