[英]sort in bash problem with multiple columns
我需要對一個名為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
好的,我不得不稍作搜索,但這是解決方案:
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
或任何不再適用的標志。 因此,不可能將全局標志與局部鍵修飾符混合使用。
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上 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.