GNU sort 和 git blame

GNU sort 和 git blame

今天我以为我在做一个简单的操作:

git blame file | sort -k 3

按照上次修改日期对所有行进行排序file。不幸的是,排序似乎不正确。它如果我执行以下操作,则有效:

git blame file | cut -c 20- | sort

它只是删除了行的第一部分,然后进行排序。这个命令的成功表明sort 实际上执行了我尝试的操作。为什么没有成功?

以下是输出中的一个示例行git blame file

35d8e9eb (username 2007-01-17 03:58:04 +0000 155) Some text on line 155

编辑:使用3原始命令行之外的任何合理数字似乎都可以正常工作 - 我可以按哈希值(字段 1)、用户名(字段 2)、时间(字段 4)或行号(字段 6)进行排序,但日期(字段 3)不起作用 - 我根本无法确定它最终的顺序......

编辑 2:我制作了一个经过清理的输入文件,它显示了同样的问题。这里是cleaned.txt

cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

输出来自sort -k 3 cleaned.txt

$ sort -k 3 cleaned.txt 
cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

如您所见,日期字段的排序似乎根本没有发生。以下是输出cut -c 20- cleaned.txt | sort

$ cut -c 20- cleaned.txt | sort
2007-01-17 03:58:04 +0000 135)
2010-01-30 04:26:28 +0000 178)
2010-12-14 19:41:18 +0000  42)

在这种情况下,按日期排序效果很好!有什么建议吗?

答案1

我刚刚才搞明白。较短的用户名eeeeeee意味着日期字段前有一个额外的空格。由于的字段分隔符sort是从非空白到空白的过渡,因此用户名较短的行的日期字段将该空格作为关键字段的一部分,并首先排序。简单的解决方法:

git blame file | sort -b -k 3

相关内容