2017-03-15 89 views
0

比方说,我有一个CSV文件格式,像这样:使用sed查找并替换第二次出现的行首?

1,Mark 
1,Smith 
2,Janet 
2,Smith 

,我需要做这样的:

1,Mark Smith 
2,Janet Smith 

我需要后更换任何给定行首战的每次出现首先,将没有开启器的行连接到最后一行。我怎样才能做到这一点?

+2

你为自己做了什么? – Inian

回答

1

下一行追加到图案空间和删除换行符后跟数字:

sed 'N;s/\n[0-9]//;s/,/ /2g' file 

在情况下,有可能只有一个或两个以上的匹配项:

sed ':a;N;s/^\([0-9][0-9]*\)\(.*\) *\n\1,/\1\2 /;ta;P;D;' file 
+0

你可能想删除第二个或更多的逗号并用空格替换 – potong

+0

@potong谢谢,我编辑过。 – SLePort

0

随着AWK是更容易,并且无论您可能有多少次出现或无论数据是否排序,都将工作得很好:

awk 'BEGIN{FS=OFS=","}{!a[$1]?a[$1]=$0:a[$1]=a[$1] " " $2}END{for (i in a) print a[i]}' file1 
+0

任何人都可以知道在记事本++中这个例子的正则表达式是什么? –