加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:24:52 所属栏目:安全 来源:网络整理
导读:我正在寻找一个更具体的版本:sort u命令,它将删除文件中的所有重复行.我正在使用csv,我想删除第二列条目重复的所有行.一个例子应该有助于澄清: a,1,bg,fc,xi,2,lm,ko,pu,z sort命令应该产生: a,bi,l 注意:保留的特定行并不重要,只要在排序后第二列条目都
我正在寻找一个更具体的版本: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_

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读