Shell 如何在文本文件中将重复字符转换为新行
我有一个与此类似的文本文件(不幸的是,数据就是这样提取的): 是否有一个(或多个)命令,我可以使用它得到这样的格式Shell 如何在文本文件中将重复字符转换为新行,shell,unix,sed,format,tr,Shell,Unix,Sed,Format,Tr,我有一个与此类似的文本文件(不幸的是,数据就是这样提取的): 是否有一个(或多个)命令,我可以使用它得到这样的格式 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
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
也许是这样的
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
是打字错误?否则,请解释它们是如何从输入中派生出来的。