我需要对一个名为lokdata的文件进行排序
(1) (260, 02) 0x2c435 0x2c43501 Thu Sep 27 09:43:21 2018
(1) (60, 02) 0x2c435 0x2c43503 Thu Sep 27 09:46:14 2018
(1) (260, 02) 0x2c435 0x2c43503 Thu Sep 27 09:46:44 2018
(1) (260, 03) 0x4461e 0x4461e1f Thu Sep 27 10:31:05 2018
我需要对最新日期进行排序,以便可以使用head。 我的尝试失败示例
sort -k10,10r -r -k7,7M -k 8,8 -k9,9r lokdata
(1) (260, 02) 0x2c435 0x2c43501 Thu Sep 27 09:43:21 2018
(1) (260, 02) 0x2c435 0x2c43503 Thu Mar 01 09:46:14 2018
(1) (260, 02) 0x2c435 0x2c43503 Thu Mar 03 09:46:44 2018
(1) (260, 02) 0x2c435 0x2c43501 Thu Mar 29 09:43:21 2018
(1) (260, 03) 0x4461e 0x4461e1f Thu Sep 27 10:31:05 2026
答案 0 :(得分:0)
好的,我不得不稍作搜索,但这是解决方案:
sort -k10nr,10 -k7Mr,7 -k8nr,8 -k9r,9
输出
(1) (260, 03) 0x4461e 0x4461e1f Thu Sep 27 10:31:05 2026
(1) (260, 02) 0x2c435 0x2c43501 Thu Sep 27 09:43:21 2018
(1) (260, 02) 0x2c435 0x2c43501 Thu Mar 29 09:43:21 2018
(1) (260, 02) 0x2c435 0x2c43503 Thu Mar 03 09:46:44 2018
(1) (260, 02) 0x2c435 0x2c43503 Thu Mar 01 09:46:14 2018
它如何工作?
-k10nr,10
:在代表年份的第10个字段上进行反向数字排序-k7Mr,7
:第二种是月份排序,它使用标准的3个字符的月份表示法进行排序,再次相反。k8nr,8
:第三种排序是在当月的某天,再次将数字反转。-k9r,9
:最后将9个字段排序为代表时间的字符串,而且时间明显不同。 为什么这么复杂?从定义一个修饰符的那一刻起,在密钥规范中,全局标记-r
或-n
或任何不再适用的标记。因此,不可能将全局标志与局部键修饰符混合使用。
答案 1 :(得分:0)
cat lokdata |
xargs -d'\n' -l1 -- sh -c 'echo "$(date --date="$(<<<"$1" cut -d " " -f7-)" +%s)" "$1"' -- |
sort -r -n -k1 |
cut -d ' ' -f2-
要避免CPU过热,请将cat lokdata |
更改为< lokdata
。
tutorialspoint上的生活示例。