我怎样才能使重复的字符到一个新的行文本文件

问题描述:

我有类似这样的(这是怎样的数据,不幸中提取)的文本文件:我怎样才能使重复的字符到一个新的行文本文件

asdf,10.vip0,sample_pool1,;;;;;;;;10.server1;;;;;;;;;;11.server2;;;;;;;;;;12.server3;; 
asdf,10.vip1,sample_pool2,;;;;;;;;10.server1;;;;;;;;;;11.server2;;;;;;;;;;12.server3;; 
asdf,10.vip2,sample_pool3,;;;;;;;;10.server1;;;;;;;;;;11.server2;;;;;;;;;;12.server4;; 

是否有一个命令(S)我可以用它来像这样格式化?

asdf,10.vip0,sample_pool1,10.server1 
11.server2 
12.server3 
asdf,10.vip1,sample_pool2,10.server41 
11.server42 
12.server43 
asdf,10.vip2,sample_pool3,10.server31 
11.server32 
12.server34 
+0

我们可以假设在所需的输出中(可能在sampe输入中)“server41”和“server31”是拼写错误吗?否则,请解释它们是如何从输入中派生的。 – Yunnosch

也许是这样的?

$ sed 's/;;;\+//; s/;;;\+/\n/g; s/;;$//' file 
asdf,10.vip0,sample_pool1,10.server1 
11.server2 
12.server3 
asdf,10.vip1,sample_pool2,10.server1 
11.server2 
12.server3 
asdf,10.vip2,sample_pool3,10.server1 
11.server2 
12.server4 

它消除了重复分号的第一组s/;;;\+//然后将其替换所有剩余组新线s/;;;\+/\n/g,最后,在结束s/;;$//

AWK摆脱两个分号方法:

awk -F, '{ sub(/,;+/,",",$0); sub(/;+$/,"",$0); gsub(/;{3,}/,"\n",$0) }1' file 

输出:

asdf,10.vip0,sample_pool1,10.server1 
11.server2 
12.server3 
asdf,10.vip1,sample_pool2,10.server1 
11.server2 
12.server3 
asdf,10.vip2,sample_pool3,10.server1 
11.server2 
12.server4