我有一个目录,其中包含以时间戳结尾的文件。我想按名称中的时间戳顺序遍历这个目录中的文件。我在Unix的shell脚本中做这件事。
filename1_20230517_065806.txt
filename2_20230517_055806.txt
filename_3_20230517_125806.txt
file_name_4_20230517_063806.txt
我需要按以下顺序处理这个
filename2_20230517_055806.txt
file_name_4_20230517_063806.txt
filename1_20230517_065806.txt
filename_3_20230517_125806.txt
订单应该只查看文件名的时间部分。我希望这样做,但由于文件名可以有任何数量的下划线,我有困难。
for i in $(ls *.txt | sort -t'_' -k3)
do...
有没有一种方法可以让sort查看最后一个分隔的索引并按它排序?
3条答案
按热度按时间fxnxkyjh1#
你可以使用“rev”来反转元素,然后用前两个元素排序:
输出看起来与预期相同:
vaj7vani2#
我认为您需要awk的帮助,使用临时增加数据的“技巧”,通过在每行添加所需的排序键。我还在下面的排序键中添加了日期($(NF-1))。
for i in $(ls *.txt | awk -F_ ‘{print $(NF-1) $NF “\t” $0}’ | sort | cut -f 2-) do...
hgb9j2n63#