我怎样才能使重复的字符到一个新的行文本文件
问题描述:
我有类似这样的(这是怎样的数据,不幸中提取)的文本文件:我怎样才能使重复的字符到一个新的行文本文件
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
答
也许是这样的?
$ 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
我们可以假设在所需的输出中(可能在sampe输入中)“server41”和“server31”是拼写错误吗?否则,请解释它们是如何从输入中派生的。 – Yunnosch