我正在寻找一个更具体的版本: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命令,让我们将其视为一个两步过程.
原文链接:https://www.f2er.com/bash/385110.html一次运行:sort命令,让我们将其视为一个两步过程.
第一步是按第二个逗号分隔的值对行进行排序
柱.为此,我们可以使用:sort命令传递常规
与第一列和以下分隔逗号匹配的表达式.
As:sort比较指定匹配后开始的文本
每行上的模式,它给我们所需的排序顺序.
:sort/^[^,]*,/
要以数字方式比较值,而不是按字典顺序,请使用n标志:
:sort n/^[^,/
第二步涉及运行排序的行并删除所有
它们只是第二列中具有相同值的那些之一.它是
方便在:global命令上构建我们的实现
在匹配特定模式的行上执行Ex命令.根据定义,
如果一行在第二列中包含相同的值,则可以删除该行
下一行.这种形式化(伴随着最初的假设
逗号不能出现在列值中)给出了以下模式:
^[^,\([^,]*\),.*\n[^,\1,.*
因此,如果我们在满足此模式的每一行上运行:delete命令,
从上到下,我们将只有一行代表每个不同的值
第二栏.
:g/^[^,.*/d_
这两个步骤可以组合在一个Ex命令中,
:sort/^[^,/|g/^[^,.*/d_