次の形式のテキストファイルがあり、日付に基づいて行を並べ替える必要があります。これを行う簡単な方法はありますか(好ましくは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
sort
GNUにフィールドを別の文字(あなたのダッシュ)に分割するように指示すると、-
ソートが簡単です。
$ 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番目の列(日)を並べ替えます。
より多くの情報を見ることができますここ。