マルチフィールドソートから数値逆順にサブフィールドでソート

マルチフィールドソートから数値逆順にサブフィールドでソート

たとえば、ディレクトリ/ファイルリスト(長いリストのサブセット)にGNUソートを使用したいとします。

exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf

ファイル名(4番目のフィールド)とシーズン(3番目のフィールド)に基づいて正常にソートされました。

$ sort -t/ -k4 -k3,3 
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf

ただし、これらのブロックごとに、最初のフィールドの6〜9番目の4桁の数字を使用して、3番目のソート基準で年ごとに降順にソートする必要があります。私が使用している場合:

sort -t/ -k4 -k3,3 -k1.6nr,1.9 

うまくいくようですが、3番目の基準を逆順に並べ替えません。

exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf

明らかに、ここで何かが間違っていますが、関連する質問では、この特定の条件(3次ソート基準、サブフィールド、数字、逆方向)は扱われず、失敗する理由はわかりません。

ベストアンサー1

サンプルデータに新しい行を追加したことを確認するには、次の手順を実行します。

exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
exams2014/Zoology/Summer/ZY4029Sum2014.pdf <- This is added by me

ソートも4番目のフィールドに依存することを説明するためにこれを追加します。年も同じで3番目のフィールドも同じですが、4番目のフィールドが異なります。私が正しく理解したら、あなたは好きなように動作します。

sort -t/ -k3,3 -k1.6nr,1.9 -k4 file

出力:

exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
exams2014/Zoology/Summer/ZY4029Sum2014.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2008/Zoology/Summer/ZY4019Sum08.pdf

3番目のフィールド(-k3,3)が最初にソートされ、最初のフィールドの文字6〜9が数字の反転(-k1.6nr,1.9)でソートされ、最後に4番目のフィールド(-k4)がソートされます。

おすすめ記事