我有一个.csv
文件,我想排序预提交。我found这个预提交挂钩file-contents-sorter
排序的第一个值的文件。
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.1.0
hooks:
- id: file-contents-sorter
files: blackbox-files\.csv$
但我想先按最后一个值排序,然后按第一个值排序。我想知道是否可以用预提交git钩子来做类似的事情。
我的csv文件是这样的:
aaaa,bbbb
sssss,bbbb
fff,bbb
kkkk,eeee
www,ddd
The above code gives me this output:
aaaa,bbbb
fff,bbb
kkkk,eeee
sssss,bbbb
www,ddd
I'd like this output:
aaaa,bbbb
fff,bbb
sssss,bbbb
www,ddd
kkkk,eeee
2条答案
按热度按时间dhxwm5r41#
基于一个简单的hack和
sort
's ability to sort by arbitrary columns,下面是如何使用GNUsort
实现这一点:基本上,由于
sort
一次只能就地排序一个文件,因此我们必须遍历整个参数数组(不是$@
,因为它不包括$0
)。LC_COLLATE
设置用于排序或排序的语言环境,以确保排序在不同的机器上是一致的。大多数sort
参数都是用来按第二个和第一个逗号排序的-分隔字段。7hiiyaii2#
这里有一个未解决的问题,你有
bbb
排序在bbbb
之前和之后,最简单的解释是第一个字段覆盖了第二个字段,但是你也有kkkk,eeee
排序在www,ddd
之后,最简单的解释是第二个字段覆盖了第一个字段,也许我在这里只是盲点,这是一个次要的问题,所以我会做一些东西,来产生你给出的结果,然后使用它,我使用的排序键可以,但是可能不会一直都是你想要的,检查一下。在进入存储库的过程中清理文件的一般方法是使用过滤器。
以及
然后文件将被过滤添加。过滤器规格本身必须(重新)配置在任何使用它们的repo中,这是一个严重的不好的强迫需要不邀请代码注入攻击,对不起,但ILOVEYOU是不有趣的。在您的自述文件中做一个笔记,或添加几行在您的设置食谱,无论您如何做您的新repo onboarding这是另一个恼人的步骤。