Sort
按字母和數字順序對絕對目錄路徑進行排序
我很難線上找到使用字母和數字對絕對目錄路徑進行排序的解決方案。
範例是名為 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
如果您有 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
我們通過比較所有十進制數字序列被零填充到 6 位之後的行來對列表進行排序。
如果文件中的行總是這樣的形狀,並且您只需要比較前面的部分並且只在
.
詞法上比較它,然後在數字上比較它之後的部分,那麼,您可以這樣做:sort -t. -k1,1 -k2,2n < test.txt