我最近在Perl中编写了一个简单的实用程序,用于计算文件中的单词以确定其频率,即出现的次数。
一切都很好,但我想对结果进行排序,以便更容易阅读。输出示例如下:
4:an
2:but
5:does
10:end
2:etc
2:for
正如您所看到的,它是按字而不是频率排序的。但是在:sort
的帮助下,我可以重组一下。使用n
,10之类的数字会转到正确的位置(即使它以1开头),再加上一点!
,顺序也会反转,因此出现的数字更多是第一个。< / p>
:sort! n
10:end
5:does
4:an
2:for
2:etc
2:but
问题是:当重复这个数字时,它会按字词排序 - 这很好 - 但请记住,顺序是相反的!
for -> etc -> but
我该如何解决?我是否必须使用一些Vim脚本来迭代每一行,检查它是否以前一个数字开头,并标记相关行以在数字更改后对它们进行排序?
答案 0 :(得分:4)
tac | sort -nr
这样做,所以选择shift + V的行并使用!
答案 1 :(得分:2)
来自vim
:help sort
:
The details about sorting depend on the library function used. There is no
guarantee that sorting is "stable" or obeys the current locale. You will have
to try it out.
因此,您可能希望在Perl脚本中执行排序;将Perl sort
扩展为稳定并不难,请参阅perldoc sort
了解太多详细信息。
如果您只想完成此问题,则可以将:sort
命令替换为:
!sort -rn --stable
(最简单的方法是使用Shift-V首先在视觉上选择线条,或者使用范围进行排序,或类似的东西,但如果您正在编写vim
个脚本,这对你来说都不会是新闻。:)