2016-08-25 28 views
1

おはよう。私は、シェルスクリプトを使ってtxtファイルから次のデータをソートしようとしていましたが、今のところ私はそうすることができませんでした。ここでシェルで日付を並べ替える

は、ファイル上のデータは、私は何をしたいが代わりに名前またはIDの日付でこれを並べ替えることができることである,:

Name:ID:Date 
    Clinton Mcdaniel:100:16/04/2016 
    Patience Mccarty:101:18/03/2013 
    Carol Holman:102:24/10/2013 
    Roth Lamb:103:11/02/2015 
    Chase Gardner:104:14/06/2014 
    Jacob Tucker:105:05/11/2013 
    Maite Barr:106:24/04/2014 
    Acton Galloway:107:18/01/2013 
    Helen Orr:108:10/05/2014 
    Avye Rose:109:07/06/2014 

のように見えるものです。 私は次のコードを実行すると、私はこの取得:

コード:

sort -t "/" -k3.9 -k3.4 -k3 

結果:

Acton Galloway:107:18/01/2013 
Amaya Lynn:149:11/08/2013 
Anne Sullivan:190:12/01/2013 
Bruno Hood:169:01/08/2013 
Cameron Phelps:187:17/11/2013 
Carol Holman:102:24/10/2013 
Chaney Mcgee:183:11/09/2013 
Drew Fowler:173:28/07/2013 
Hadassah Green:176:17/01/2013 
Jacob Tucker:105:05/11/2013 
Jenette Morgan:160:28/11/2013 
Lael Aguirre:148:29/05/2013 
Lareina Morin:168:06/05/2013 
Laura Mercado:171:06/06/2013 
Leonard Richard:154:02/06/2013 

あなたは今年だけの種類を、それを見ることができるように、しかし、月と他のすべてをまだ少し外れています。これを日付で正しく並べ替える方法を誰かが知っていますか?

EDIT:まあ、I`veはそれを行う方法を見つけ

、以下の答え:

コード:sort -n -t":" -k3.9 -k3.4,3.5 -k3

結果:

Anne Sullivan:190:12/01/2013 
Hadassah Green:176:17/01/2013 
Acton Galloway:107:18/01/2013 
Nasim Gonzalez:163:18/01/2013 
Patience Mccarty:101:18/03/2013 
Sacha Stevens:164:01/04/2013 
Lareina Morin:168:06/05/2013 
Lael Aguirre:148:29/05/2013 
Leonard Richard:154:02/06/2013 
Laura Mercado:171:06/06/2013 
Drew Fowler:173:28/07/2013 
Bruno Hood:169:01/08/2013 
Virginia Puckett:144:08/08/2013 
Moses Mckay:177:09/08/2013 
Amaya Lynn:149:11/08/2013 
Chaney Mcgee:183:11/09/2013 
Willa Bond:153:22/09/2013 
Oren Flores:184:27/09/2013 
Olga Buckley:181:11/10/2013 
Carol Holman:102:24/10/2013 
Jacob Tucker:105:05/11/2013 
Veda Gillespie:125:09/11/2013 
Thor Workman:152:12/11/2013 
Cameron Phelps:187:17/11/2013 
Jenette Morgan:160:28/11/2013 
Mason Contreras:129:29/12/2013 
Martena Sosa:158:30/12/2013 
Vivian Stevens:146:20/01/2014 
Benedict Massey:175:02/03/2014 
Macey Holden:127:01/04/2014 
Orla Estrada:174:06/04/2014 
Maite Barr:106:24/04/2014 
Helen Orr:108:10/05/2014 
Randall Colon:199:27/05/2014 
Avye Rose:109:07/06/2014 
Cleo Decker:117:12/06/2014 
Chase Gardner:104:14/06/2014 
Mark Lynn:113:21/06/2014 
Geraldine Solis:197:24/06/2014 
Thor Wheeler:180:25/06/2014 
Aimee Martin:192:21/07/2014 
Gareth Cervantes:166:26/08/2014 
Serena Fernandez:122:24/09/2014 

`

答えて

1

ご使用の並べ替えは、2000年前の日付では失敗します(19992098の後にソートされます)。

あなた-tは各コロンのフィールドを区切る:コメントにあなたの質問に引き続き、あなたは現在あなたが

sort -n -t":" -k3.7 -k3.4,3.5 -k3.1,3.2 

説明を使用する必要があります

sort -n -t":" -k3.9 -k3.4,3.5 -k3 

を示しました。 (':'KEYDEFフォームf[.c][opt](つまり、field.character optionだ)(あなたはcharacter後に別途optionを必要としない)である-kKEYDEF4桁分野における2桁年です-k3.9によって

d d/m m/y y y y 
    1 2 3 4 5 6 7 8 9 0 -- chars counting from 1 in field 3 

だから最初の並べ替え(フィールド39th文字):あなたの日付フィールドは、(フィールド3)です。あなたは本当にあなたは大丈夫です(文字4,5)によって次のソート

4桁日の始まりである)-k3.7にソートします。

最後に、-k3をソートします(これは、考慮する文字を制限しません)。月の並べ替えを4,5の文字に限定したのと同様に、日の並べ替えを文字の1,2に制限する必要があります。

これをまとめるとsort -n -t":" -k3.7 -k3.4,3.5 -k3.1,3.2となります。コメントからあなたの質問に答えることを願っています。

+0

さて、私は何が起こっているのか理解しています。ヘルプメイトに感謝します。 –

+0

うれしい私は助けることができます。 * man sort *の 'sort -k'の説明は私の頭を最初の数回傷つけてしまいました' –

0

をあなたがあなたの(ひどい、IMO)日付形式で苦しんでいます。ここではシュワルツのビット変換です:年、月、日を抽出し、各行の先頭に別の単語として追加します

awk -F'[:/]' '{printf "%s%s%s %s\n", $NF, $(NF-1), $(NF-2), $0}' file | sort -n | cut -d' ' -f2- 

を。その後、あなたは非常に単純にソートすることができます。その後、その日付を破棄します。

+0

'sort 'を使うと、フィールド区切り文字として正規表現を使用できますが、大丈夫ですが、そうではありません。 –

+0

私はちょうど次のコードを実行しました sort -n -t ":" -k3.9 -k3.4,3.5 -k3 そしてそれはうまくいかなかったのですが、 –

関連する問題