将第一列的重复值替换为字符“
Replace duplicate values of first column with character "
示例输入:
a:g:h:e:f:n
a:u:r:t:w:r
a:g:r:o:p:q
d:h:t:y:r:o
d:n:t:s:d:f
d:g:h:u:i:m:
d:s:e:r:t:y
n:m:k:s:t:r
n:r:t:y:w:g
预期输出:
a:g:h:e:f:n
":u:r:t:w:r
":g:r:o:p:q
d:h:t:y:r:o
":n:t:s:d:f
":g:h:u:i:m:
":s:e:r:t:y
n:m:k:s:t:r
":r:t:y:w:g
用 " 替换第一列重复值,直到找到不同的值。这是我发现的接近的东西,但替换是跨文件的:
awk '{for(i=1;i<=NF;i++){if(x<27&&$i=="old"){x++;sub("old","new",$i)}}}1' input_file
使用 awk:
$ awk 'BEGIN{FS=OFS=":"}{t=;if(==p)="\"";p=t}1' file
输出:
a:g:h:e:f:n
":u:r:t:w:r
":g:r:o:p:q
d:h:t:y:r:o
":n:t:s:d:f
":g:h:u:i:m:
":s:e:r:t:y
n:m:k:s:t:r
":r:t:y:w:g
解释:
$ awk '
BEGIN {
FS=OFS=":" # field delimiters
}
{
t= # 1st field to tmp
if(==p) # if current equals previous
="\"" # replace with "
p=t # previous form tmp
}1' file # output
更新:使用sub
:
$ awk 'BEGIN{FS=":"}{t=;if(==p)sub(/^[^:]*/,"\"");p=t}1' file
能否请您尝试以下(因为 OP 提到 o.s 是太阳 os,所以使用 nawk
)。
nawk -v var="\"" '
BEGIN{
FS=OFS=":"
}
{
=++a[]>1?var:
}
1
' Input_file
由于您在 Sun o.s 上使用上述代码中的 nawk
。此代码将不依赖于第一个字段的顺序,而不管它的顺序如何,这应该有效。
示例输入:
a:g:h:e:f:n
a:u:r:t:w:r
a:g:r:o:p:q
d:h:t:y:r:o
d:n:t:s:d:f
d:g:h:u:i:m:
d:s:e:r:t:y
n:m:k:s:t:r
n:r:t:y:w:g
预期输出:
a:g:h:e:f:n
":u:r:t:w:r
":g:r:o:p:q
d:h:t:y:r:o
":n:t:s:d:f
":g:h:u:i:m:
":s:e:r:t:y
n:m:k:s:t:r
":r:t:y:w:g
用 " 替换第一列重复值,直到找到不同的值。这是我发现的接近的东西,但替换是跨文件的:
awk '{for(i=1;i<=NF;i++){if(x<27&&$i=="old"){x++;sub("old","new",$i)}}}1' input_file
使用 awk:
$ awk 'BEGIN{FS=OFS=":"}{t=;if(==p)="\"";p=t}1' file
输出:
a:g:h:e:f:n
":u:r:t:w:r
":g:r:o:p:q
d:h:t:y:r:o
":n:t:s:d:f
":g:h:u:i:m:
":s:e:r:t:y
n:m:k:s:t:r
":r:t:y:w:g
解释:
$ awk '
BEGIN {
FS=OFS=":" # field delimiters
}
{
t= # 1st field to tmp
if(==p) # if current equals previous
="\"" # replace with "
p=t # previous form tmp
}1' file # output
更新:使用sub
:
$ awk 'BEGIN{FS=":"}{t=;if(==p)sub(/^[^:]*/,"\"");p=t}1' file
能否请您尝试以下(因为 OP 提到 o.s 是太阳 os,所以使用 nawk
)。
nawk -v var="\"" '
BEGIN{
FS=OFS=":"
}
{
=++a[]>1?var:
}
1
' Input_file
由于您在 Sun o.s 上使用上述代码中的 nawk
。此代码将不依赖于第一个字段的顺序,而不管它的顺序如何,这应该有效。