在线的一部分排序,保持领带的顺序

时间:2014-01-15 10:52:14

标签: git bash sorting git-log

我想按日期(不是按时间)订购一些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保持平局排序? 我可以在输出中添加任何所需的字符......

2 个答案:

答案 0 :(得分:1)

您似乎在寻找-s的{​​{1}}选项:

sort

   -s, --stable
          stabilize sort by disabling last-resort comparison

代替。

答案 1 :(得分:1)

还要注意sort -debug选项来帮助解决这个问题(在这种情况下,它会使第二个有问题的类型显而易见)