如何基于字符串特定字段对日志文件名排序?sort命令无效求助
解决自定义文件名排序问题
别担心,我来帮你搞定这个排序需求!普通的sort命令默认按整个字符串的字典序排序,所以没法满足你先按文件名第5-8位、再按日志编号排序的要求。不过我们可以用sort的自定义排序键功能来实现。
具体命令
假设你的文件名列表保存在log_files.txt中,运行以下命令就能得到你想要的结果:
sort -k1.5,1.8 -k1.14,1.16 log_files.txt
命令解释
让我拆解一下这个命令的关键部分:
-k1.5,1.8:指定第一个字段(整个文件名)的第5个字符到第8个字符作为第一排序依据。这正好对应你提到的741500881101_003.log中的0088部分,让文件先按这四位分组排序。-k1.14,1.16:指定第一个字段的第14个字符到第16个字符作为第二排序依据。这对应文件名中_后面的三位日志编号(比如003),确保同一分组内的文件按日志编号从小到大排列。
验证效果
运行这个命令后,输出会和你期望的结果完全一致:
738500861101_001.log 738500861101_002.log 738500861101_003.log 666500872101_001.log 666500872101_002.log 666500872101_003.log 666500872101_004.log 741500881101_001.log 741500881101_002.log 741500881101_003.log
如果你的文件名列表是直接通过命令输出的(比如ls *.log),也可以直接管道到这个sort命令:
ls *.log | sort -k1.5,1.8 -k1.14,1.16
内容的提问来源于stack exchange,提问作者Abhishake Yadav
相关产品推荐
相关产品推荐

