我正在尝试对目录/文件列表使用 GNU 排序,例如(更长列表的子集):
exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
我已经成功地对文件名(第四个字段)进行了排序,然后是季节(第三个字段),例如
$ sort -t/ -k4 -k3,3
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
但对于像这样的每个块,我需要它们按年份降序排列作为第三个排序标准,使用第一个字段的位置 6 到 9 的四位数字。如果我使用:
sort -t/ -k4 -k3,3 -k1.6nr,1.9
看起来好像应该可以工作,但它不会按相反的数字顺序对第三个标准进行排序:
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
我显然在这里做错了什么,但相关问题没有解决这个特定条件(第三个排序标准、子字段、数字、反向),而且我无法确定它失败的原因。
答案1
为了确保我在示例数据中添加了新行:
exams2008/Zoology/Summer/ZY4019Sum08.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
exams2014/Zoology/Summer/ZY4029Sum2014.pdf <- This is added by me
我添加它是为了说明排序也取决于第四个字段。它具有相同的年份和相同的第 3 字段,但第 4 字段不同。如果我理解正确的话,那应该做你想要的。
sort -t/ -k3,3 -k1.6nr,1.9 -k4 file
输出:
exams2013/Zoology/Autumn/ZY4019Aut2013.pdf
exams2012/Zoology/Autumn/ZY4019Aut2012.pdf
exams2014/Zoology/Summer/ZY4019Sum2014.pdf
exams2014/Zoology/Summer/ZY4029Sum2014.pdf
exams2013/Zoology/Summer/ZY4019Sum2013.pdf
exams2012/Zoology/Summer/ZY4019Sum2012.pdf
exams2011/Zoology/Summer/ZY4019Sum2011.pdf
exams2010/Zoology/Summer/ZY4019Sum2010.pdf
exams2009/Zoology/Summer/ZY4019.pdf
exams2008/Zoology/Summer/ZY4019Sum08.pdf
首先对第三个字段 ( -k3,3
) 进行排序,然后第一个字段的字符 6-9 应该是反向的数字 ( -k1.6nr,1.9
),最后对第四个字段 ( -k4
) 进行排序。