0

ファイル名に添付された「日付文字列」に応じて、ディレクトリ内のファイルを並べ替えようとしています。たとえば、ファイルは次のよう SSA_F12_05122013.request.done SSA_F13_12142012.request.done SSA_F14_01062013.request.done になります。これらのファイルをファイル名に含まれる日付文字列で (降順および昇順で) 並べ替えるための UNIX シェル スクリプトを提供するのを手伝ってください。

前もって感謝します。

4

4 に答える 4

3

うーん...sort何を正確にソートするかを定義する機能があるのに、なぜawkやPerlのような重いものを呼び出すのですか?

ls SSA_F*.request.done | sort -k 1.13,1.16 -k 1.9,1.10 -k 1.11,1.12 

-kオプションは「ソート キー」を定義します。

-k 1.13,1.16

これは、フィールド 1 の 13 列目からフィールド 1 の 16 列目までの範囲のソート キーを定義します (フィールドはデフォルトで、ファイル名にはない空白で区切られます)。

ファイル名の長さが異なる場合は、アンダースコアをフィールドセパレーターとして定義し (-tオプションを使用)、3 番目のフィールドの列をアドレス指定する方法が適しています。

詳細は を参照しman sortてください。オプションを使用して-r、降順で並べ替えます。

于 2013-04-17T12:27:58.980 に答える
0
ls *.done | perl -pe 's/^.*_(..)(..)(....)/$3$2$1$&/' | sort -rn | cut -b9-

これはするだろう +

于 2013-04-17T12:24:35.907 に答える
0
ls -lrt *.done | perl -lane '@a=split /_|\./,$F[scalar(@F)-1];$a[2]=~s/(..)(..)(....)/$3$2$1/g;print $a[2]." ".$_' | sort -rn | awk '{$1=""}1'
于 2013-04-17T11:04:08.690 に答える
0

awk と sort を使用した一方向:

ls -1|awk -F'[_.]' '{s=gensub(/^([0-9]{4})(.*)/,"\\2\\1","g",$3);print s,$0}'|sort|awk '$0=$NF'

それを分解すると:

ls -1|
awk -F'[_.]' '{s=gensub(/^([0-9]{4})(.*)/,"\\2\\1","g",$3);print s,$0}'|
sort|
awk '$0=$NF'

ls -1まさにその例。ファイルリストを1行に1つずつ取得する方法があると思います。

少しテストします。

kent$  echo "SSA_F13_12142012.request.done
SSA_F12_05122013.request.done
SSA_F14_01062013.request.done"|awk -F'[_.]' '{s=gensub(/^([0-9]{4})(.*)/,"\\2\\1","g",$3);print s,$0}'|
sort|
awk '$0=$NF'
SSA_F13_12142012.request.done
SSA_F14_01062013.request.done
SSA_F12_05122013.request.done
于 2013-04-17T12:07:19.737 に答える