如何排除表头,按日期字段对文件中的数据进行排序?
解决按日期列排序并保留表头的问题
我来帮你搞定这个排序问题!你的原命令有几个小问题导致没达到预期,咱们一步步修正:
原命令的问题分析
- 字段指定错误:
-k k4写法不对,应该是-k4(直接指定第4个字段,k是选项标识,不需要重复写) - 排序类型错误:
-n是按纯数字排序,但你的日期是包含月份缩写的字符串,需要用-M选项来识别月份 - 未指定分隔符:默认
sort用空白字符分隔字段,而你的数据用|分隔,必须指定-t'|' - 表头未单独处理:原命令会把表头也参与排序,导致表头位置错乱
正确的解决方案
我们可以把表头单独提取输出,再对数据行按日期排序,组合起来就是符合逻辑的结果:
head -n 1 /d/file.txt && tail -n +2 /d/file.txt | sort -t'|' -k4M
命令参数解释
head -n 1 /d/file.txt:提取文件的第一行(表头)直接输出,避免参与排序tail -n +2 /d/file.txt:提取从第二行开始的所有数据行,交给后续的sort处理-t'|':指定字段分隔符为竖线|,确保sort能正确识别每一列的边界-k4M:对第4个字段(即DATES列)排序,M选项让sort识别月份缩写(比如JUL),并按照「月份→日期→年份」的自然时间逻辑排序
执行后的输出
运行上面的命令后,会得到符合日期逻辑的正确排序结果(注:你的期望输出中日期顺序存在小失误,4 JUL 早于7 JUL,应该排在前面):
NAME|AGE|COURSE|DATES v2|33|MB|4 JUL 2019 v4|21|JJ|7 JUL 2019 v1|31|MC|12 JUL 2019 v3|12|GG|13 JUL 2019
如果需要按日期降序排序,只需要在 sort 后面加上 -r 选项即可:
head -n 1 /d/file.txt && tail -n +2 /d/file.txt | sort -t'|' -k4Mr
内容的提问来源于stack exchange,提问作者user16375592
相关产品推荐
相关产品推荐

