文字と数字を使用して絶対ディレクトリパスをソートするためのソリューションをオンラインで見つけるのが困難です。
例は次のとおりです。 test.txt というファイルにあります。
/opt/informix/data/dcdwhdev/rootdbs.2
/opt/informix/data/dcdwhdev/db1.1
/opt/informix/data/dcdwhdev/db1.10
/opt/informix/data/dcdwhdev/db1.11
/opt/informix/data/dcdwhdev/rootdbs.1
/opt/informix/data/dcdwhdev/db1.12
/opt/informix/data/dcdwhdev/db1.19
/opt/informix/data/dcdwhdev/db1.2
/opt/informix/data/dcdwhdev/db1.21
/opt/informix/data/dcdwhdev/db1.22
/opt/informix/data/dcdwhdev/db1.23
/opt/informix/data/dcdwhdev/db1.3
/opt/informix/data/dcdwhdev/db1.31
/opt/informix/data/dcdwhdev/db1.32
/opt/informix/data/dcdwhdev/db1.33
私が達成したいのは次のとおりです。
/opt/informix/data/dcdwhdev/db1.1
/opt/informix/data/dcdwhdev/db1.2
/opt/informix/data/dcdwhdev/db1.3
/opt/informix/data/dcdwhdev/db1.10
/opt/informix/data/dcdwhdev/db1.11
/opt/informix/data/dcdwhdev/db1.12
/opt/informix/data/dcdwhdev/db1.19
/opt/informix/data/dcdwhdev/db1.21
/opt/informix/data/dcdwhdev/db1.22
/opt/informix/data/dcdwhdev/db1.23
/opt/informix/data/dcdwhdev/db1.31
/opt/informix/data/dcdwhdev/db1.32
/opt/informix/data/dcdwhdev/db1.33
/opt/informix/data/dcdwhdev/rootdbs.1
/opt/informix/data/dcdwhdev/rootdbs.2
ベストアンサー1
GNUがある場合sort
(おそらくgsort
システムから呼び出された/opt/gnu/bin
か、ディレクトリにあるIBM.comのcoreutils RPM):
sort -V < test.txt
可能であればzsh
(IBM.comのRPMパッケージ):
print -rC1 -- /(Nne['reply=(${(f)"$(<test.txt)"})'])
または、ディレクトリ内のファイルを直接一覧表示します。
print -rC1 /opt/informix/data/dcdwhdev/*(Nn)
そうでない場合は、次のように使用できますperl
。
perl -e '
print $_->[1] for
sort {$a->[0] cmp $b->[0]}
map {[s/\d+/sprintf "%06d", $&/ger, $_]} <STDIN>' < test.txt
10進数のシーケンスが6桁のゼロでパディングされているすべての行を比較してリストを並べ替えます。
ファイルの行が常に次のように見え、行の前の部分のみを語彙的.
に比較し、行の後の部分を数値的に比較すると、次のようにできます。
sort -t. -k1,1 -k2,2n < test.txt