絶対ディレクトリパスをアルファベット順と数字順に並べ替える

絶対ディレクトリパスをアルファベット順と数字順に並べ替える

文字と数字を使用して絶対ディレクトリパスをソートするためのソリューションをオンラインで見つけるのが困難です。

例は次のとおりです。 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

可能であればzshIBM.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

おすすめ記事