寻求Unix命令:按文件第二列日期降序排序
解决方案
直接使用Unix的sort命令即可完成按第2列日期降序排序的需求,命令如下:
sort -k2,2r file1.txt
如果需要保持输出的列对齐(和你示例中column -t的效果一致),可以组合命令:
sort -k2,2r file1.txt | column -t
参数说明
-k2,2:指定仅对第2列进行排序(k2,2表示从第2列开头到第2列结尾,避免跨列排序)-r:启用降序排序(reverse)
为什么这个命令有效?
你的日期格式YYYY-MM-DD_HH:MM:SS是按时间从大到小的层级排列的(年→月→日→时→分→秒),这种格式的字典序和时间顺序完全匹配,因此直接用字符串排序就能得到正确的时间降序结果,不需要额外的日期解析工具。
示例执行结果
执行上述组合命令后,输出会是:
5.13.0.19S 2023-07-21_13:54:03 Activated Current 5.13.0.18S 2023-07-21_13:23:39 Activated Previous 5.13.0.17S 2023-07-21_13:09:48 Activated Antecedent 5.13.0.16S 2023-07-21_12:57:04 Activated Outdated 5.13.0.15S 2023-07-21_07:37:24 NA Outdated
特殊情况说明
如果后续调整了日期格式(比如变为非标准的、无法直接按字典序排序的格式),可以借助awk先将日期转换为时间戳,再排序,例如:
awk '{split($2, dt, /[_:-]/); ts=mktime(dt[1] " " dt[2] " " dt[3] " " dt[4] " " dt[5] " " dt[6]); print ts, $0}' file1.txt | sort -nr | cut -d' ' -f2- | column -t
这个命令先将日期转换为Unix时间戳,按时间戳降序排序后再去掉时间戳列,还原原始内容并对齐。
内容的提问来源于stack exchange,提问作者mangesh5171
相关产品推荐
相关产品推荐

