我试图根据文件名排序文件,首先根据数字排序,然后根据它的字母排序。数字是年龄,所以成年人将是最后一个。如果使用相同的数字,则根据rep1,rep2和rep 3进行排序
原始文件是这样的
abc.0.5
abc.1.2
abc.15.3
abc.2.3
abc.35.5dpp
abc.35.5dpp.rep2
abc.7.3
abc.adult
abc.adult.rep2
abc.adult.rep3
结果应该是
abc.0.5
abc.1.2
abc.2.3
abc.7.3
abc.15.3
abc.35.5dpp
abc.35.5dpp.rep2
abc.adult
abc.adult.rep2
abc.adult.rep3
我试过了
ls -v a*| sed 's/\.adult\./.99./' | sort -V | sed 's/\.99\./.adult./'
但如果在数字和成人之后有dpp或rep,它将无法正确排序。
如果你想迫使adult
成为最后一个,只需通过做两个单独的批次(一个包含该字符串的文件名,另一批不包含该文件名的文件名)将其移动到最后。那是:
shopt -s extglob nullglob
print_lines() { (( $# )) && printf '%s\n' "$@"; }
{ print_lines abc!(*adult*) | sort -V; print_lines abc*adult* | sort -V; }
我想你想要:
ls -v a* | sed 's/\.adult\./.99./' | sort -t. -k2,2n -k3,3n | sed 's/\.99\./.adult./'
这个人做的工作
ls -l abc* | awk '{print $9}'| sed 's/\.adult/.99/' | sort -V | sed 's/\.99/.adult/'