我想按日期(不是按时间)订购一些git log的输出
不幸的是,似乎不可能只按某些字符排序,忽略sort
行的其余部分。到目前为止我尝试了什么:
输入:git-log.txt
git log --date-order --reverse --show-all --pretty="%ai#%h %s"
2013-08-22 09:54:12 +0200#f03fec1 G
2013-08-21 10:43:57 +0200#c026cd6 A
2013-08-21 10:49:58 +0200#4630c3f B
2013-08-21 11:14:42 +0200#6e7141d C
2013-08-21 13:02:59 +0200#23ab0a8 D
2013-08-21 10:39:23 +0200#06b83f7 E
2013-08-21 14:10:16 +0200#f53384e F
2013-08-20 16:22:33 +0200#12591fb Z
naiv:这将完美排序,包括日期
sort -k 1.1,1.10 git-log.txt
通过解决与现有列
的联系来欺骗sort -k 1.1,1.10 -k 200 git-log.txt
欺骗它将整行解释为单列而不存在分离字符
sort -k 1.1,1.10 -t "^" git-log.txt
在所有情况下,输出为:
2013-08-20 16:22:33 +0200#12591fb Z
2013-08-21 10:39:23 +0200#06b83f7 E
2013-08-21 10:43:57 +0200#c026cd6 A
2013-08-21 10:49:58 +0200#4630c3f B
2013-08-21 11:14:42 +0200#6e7141d C
2013-08-21 13:02:59 +0200#23ab0a8 D
2013-08-21 14:10:16 +0200#f53384e F
2013-08-22 09:54:12 +0200#f03fec1 G
我需要(参见提交E的位置)
2013-08-20 16:22:33 +0200#12591fb Z
2013-08-21 10:43:57 +0200#c026cd6 A
2013-08-21 10:49:58 +0200#4630c3f B
2013-08-21 11:14:42 +0200#6e7141d C
2013-08-21 13:02:59 +0200#23ab0a8 D
2013-08-21 10:39:23 +0200#06b83f7 E
2013-08-21 14:10:16 +0200#f53384e F
2013-08-22 09:54:12 +0200#f03fec1 G
如何教sort
保持平局排序?
我可以在输出中添加任何所需的字符......
答案 0 :(得分:1)
您似乎在寻找-s
的{{1}}选项:
sort
说
-s, --stable
stabilize sort by disabling last-resort comparison
代替。
答案 1 :(得分:1)
还要注意sort -debug选项来帮助解决这个问题(在这种情况下,它会使第二个有问题的类型显而易见)