0

テキスト ファイル内の日付を人間が読める一意の出力に変換し、MM DD. ここで、日付がその年の発生順に表示されるように、出力を並べ替えたいと思います。標準シェルを使用するか、* nix に簡単にインストールできるパッケージを使用する優れた手法を知っている人はいますか?

Feb 4
Feb 5
Feb 6
Feb 7
Feb 8
Jan 1
Jan 10
Jan 11
Jan 12
Jan 13
Jan 2
Jan 25
Jan 26
Jan 27
Jan 28
Jan 29
Jan 3
Jan 30
Jan 31
Jan 4
Jan 5
Jan 6
Jan 7
Jan 8
Jan 9
4

3 に答える 3

6

月ごとにソートするためsortのオプションで呼び出されるユーティリティがあります。-Mインストールしておけばそのまま使えます。例えば:

sort -k1 -M test.txt
  • -k1: 最初の列
  • -M:月ごとに並べ替え

以下のtwalbergの提案に従って編集:

sort -k1,1M -k2,2n test.txt
于 2013-10-30T15:27:34.420 に答える
1

2 つのステップで:

$ while read line; do date -d "$line" "+%Y%m%d"; done < file | sort -n > temp
$ while read line; do date -d "$line" "+%b %d"; done < temp > file

まず、日付を変換しYYYYMMDDて並べ替えます。

$ while read line; do date -d "$line" "+%Y%m%d"; done < file | sort -n > temp
$ cat temp
20130101
20130102
20130103
20130104
20130105
20130106
20130107
20130108
20130109
20130110
20130111
20130112
20130113
20130125
20130126
20130127
20130128
20130129
20130130
20130131
20130204
20130205
20130206
20130207
20130208

次に、それらを以前の形式に出力します%b %d

$ while read line; do date -d "$line" "+%b %d"; done < temp > file
$ cat file
Jan 01
Jan 02
Jan 03
Jan 04
Jan 05
Jan 06
Jan 07
Jan 08
Jan 09
Jan 10
Jan 11
Jan 12
Jan 13
Jan 25
Jan 26
Jan 27
Jan 28
Jan 29
Jan 30
Jan 31
Feb 04
Feb 05
Feb 06
Feb 07
Feb 08
于 2013-10-30T15:28:56.027 に答える
0

sed -n "1 { H x s/. (\n). /01 Jan\102 Feb\103 Mar\104 Apr\105 May\106 Jun\107 Jul\105 Aug\109 Sep\110 Oct\111 Nov\ 12 月 112 日/ x }

s/^\(.\{3\}\) \([0-9]\) *$/\1 0\2/
H

$  {
x

t subs
: subs
   s/^\([0-9]\{2\}\) \([[:alpha:]]\{3\}\)\(\n\)\(.*\)\n\2/\1 \2\3\4\3\1 \2/
   t subs
   s/^[0-9]\{2\} [[:alpha:]]\{3\}\n//
   t subs
   p
   }
" | sort | sed "s/^[0-9][0-9] //"

まだ並べ替え (または並べ替えのためのより複雑な sed) が必要で、sort -M機能しない場合

于 2013-10-31T07:34:51.197 に答える