今天我以为我在做一个简单的操作:
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