2017-06-22 2 views
1

J'ai un fichier texte semblable à celui (Voici comment les données sont extraites malheureusement):Comment puis-je faire des caractères répéter dans une nouvelle ligne dans un fichier texte

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;; 

Y at-il une commande (s) Je peux l'utiliser pour le formater comme ça?

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

Pouvons-nous supposer que dans la sortie désirée (éventuellement dans l'entrée sampe) les 'server41' et' server31' sont des fautes de frappe? Sinon, veuillez expliquer comment ils sont dérivés de l'entrée. – Yunnosch

Répondre

1

Peut-être que quelque chose comme ça?

$ 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 

il supprime le premier groupe de virgule répétée s/;;;\+// il remplace tous les autres groupes avec une nouvelle ligne s/;;;\+/\n/g et, enfin, se débarrasser des deux virgule à la fin s/;;$//

1

awk approche:

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

La sortie:

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