我使用 Mac OS X (V10.9.5) 并在 X11 窗口中工作,我经常需要处理数千个名为 的文件XXXmmyy.dat
,其中XXX
是地点的 3 个字母的缩写,mm
是 2 位数的月份,并且是yy
2 位数的年份。
这种格式是上世纪遗留下来的,在本例中继续使用。我无法重命名这些文件。
任何人都可以设计一个ls
(用于列出的 UNIX 命令)命令,以自然时间顺序列出上述文件(就好像这些文件的命名方式XXXyyyymm.dat
是yyyy
4 位数的年份,mm
2 位数的月份)?
答案1
按时间顺序排序:
ls *.dat | sort -k 1.6,1.7 -k 1.4,1.5
按位置排序,然后按时间顺序排序:
ls *.dat | sort -k 1.1,1.3 -k 1.6,1.7 -k 1.4,1.5
这sort
手册页解释如何-k POS1,POS2
工作:
-k
,--key=POS1
[,POS2
] 开始一个键POS1
,结束于POS2
(原点 1)
POS
是F[.C][OPTS]
,其中F
是字段编号和C
字段中的字符位置。OPTS
是一个或多个单字母排序选项,它会覆盖该键的全局排序选项。如果未给出键,则使用整行作为键。