![如何使用 shell 脚本对以下文件名进行排序?](https://linux22.com/image/136877/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20shell%20%E8%84%9A%E6%9C%AC%E5%AF%B9%E4%BB%A5%E4%B8%8B%E6%96%87%E4%BB%B6%E5%90%8D%E8%BF%9B%E8%A1%8C%E6%8E%92%E5%BA%8F%EF%BC%9F%20.png)
如何使用 shell 脚本对以下文件名进行排序?
abcd_exp_4_20180706.txt
abcd_exp_3_20180706.txt
abcd_exp_1_20180706.txt
abcd_exp_2_20180706.txt
abcd_exp_5_20180706.txt
abcd_exp_1_20180707.txt
abcd_exp_5_20180707.txt
abcd_exp_4_20180707.txt
abcd_exp_3_20180707.txt
abcd_exp_2_20180707.txt
预期产出
abcd_exp_1_20180706.txt
abcd_exp_2_20180706.txt
abcd_exp_3_20180706.txt
abcd_exp_4_20180706.txt
abcd_exp_5_20180706.txt
abcd_exp_1_20180707.txt
abcd_exp_2_20180707.txt
abcd_exp_3_20180707.txt
abcd_exp_4_20180707.txt
abcd_exp_5_20180707.txt
答案1
一般来说,解析 的输出ls
是馊主意。但是,如果您知道所有文件名都遵循相同的格式,那么这是一个合理的方法。
$ ls | sort -t_ -k4 -k3,3
解释
ls |
:将 ls 的输出通过管道传输到...sort -t_ -k4 -k3
:用作_
分隔符排序,首先按第四列(例如20180706.txt
),然后按第三列(例如1
)。