Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 如何在文本文件中将重复字符转换为新行_Shell_Unix_Sed_Format_Tr - Fatal编程技术网

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
是打字错误?否则,请解释它们是如何从输入中派生出来的。