vim – :排序你 – 但只在csv中的一列?

前端之家收集整理的这篇文章主要介绍了vim – :排序你 – 但只在csv中的一列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_404_0@ 我正在寻找一个更具体的版本:sort u命令,它将删除文件中的所有重复行.我正在使用csv,我想删除第二列条目重复的所有行.一个例子应该有助于澄清:
a,1,b
g,f
c,x
i,2,l
m,k
o,p
u,z

sort命令应该产生:

a,b
i,l

注意:保留的特定行并不重要,只要在排序后第二列条目都是唯一的

什么vim命令将产生上面的输出

谢谢!

因为在这个问题下不可能实现转型
一次运行:sort命令,让我们将其视为一个两步过程.

第一步是按第二个逗号分隔的值对行进行排序
柱.为此,我们可以使用:sort命令传递常规
与第一列和以下分隔逗号匹配的表达式.
As:sort比较指定匹配后开始的文本
每行上的模式,它给我们所需的排序顺序.

:sort/^[^,]*,/

要以数字方式比较值,而不是按字典顺序,请使用n标志:

:sort n/^[^,/

第二步涉及运行排序的行并删除所有
它们只是第二列中具有相同值的那些之一.它是
方便在:global命令上构建我们的实现
在匹配特定模式的行上执行Ex命令.根据定义,
如果一行在第二列中包含相同的值,则可以删除该行
下一行.这种形式化(伴随着最初的假设
逗号不能出现在列值中)给出了以下模式:

^[^,\([^,]*\),.*\n[^,\1,.*

因此,如果我们在满足此模式的每一行上运行:delete命令,
从上到下,我们将只有一行代表每个不同的值
第二栏.

:g/^[^,.*/d_

这两个步骤可以组合在一个Ex命令中,

:sort/^[^,/|g/^[^,.*/d_

猜你在找的Bash相关文章