壳按月排序

时间:2014-05-25 15:20:45

标签: bash shell sorting unix

这是text.txt

APR
AUG
DEC
FEB
JAN
JUL
JUN
MAR
MAY
NOV
OCT
SEP

我试过了

sort -k1M text.txt
sort -M test.txt

它也无法按月份排序

Jan
Feb
Mar
bla bla bla...

我的命令有什么错误吗? 谢谢

2 个答案:

答案 0 :(得分:1)

1.请使用例如

检查文本文件中的不可见(非打印)符号
cat -v your_text_file

od -xc your_text_file|head

2.通过启动“sort --version”并排序指定绝对排序路径的文本文件来排除可能的歧义。

答案 1 :(得分:1)

可以使用GNU sort 8.21和不同于英语的默认时间区域重现此问题,这可能是您的情况。

首先,检查日期/时间值的当前设置:

grille@ced10:~$ locale | grep -i time

LC_TIME="it_IT.UTF-8"

事实上我的不是英语,所以sort -m将无法按预期使用英文月份名称:

grille@ced10:~$ cat /tmp/mesi

AUG
JAN
JUL
FEB


grille@ced10:~$ sort -M /tmp/mesi

AUG
JAN
JUL
FEB

解决方案是暂时将LC_TIME值更改为英语值:

grille@ced10:~$ LC_TIME="en_EN.UTF-8" sort -M /tmp/mesi

JAN
FEB
JUL
AUG

不要担心搞乱事情,因为在执行改变了locale变量的命令后,它的原始值会自动恢复:

grille@ced10:~$ locale | grep -i time

LC_TIME="it_IT.UTF-8"

度过愉快的一天