Corte de strings no Unix

1

Como eu poderia transformar este texto?

Formato de arquivo de entrada:

MOD MAXT:TID=TID190,MT=VCU,MAXT=100;

Formato de saída desejado:

MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;
    
por Nayot Tientong 29.12.2015 / 08:13

3 respostas

4

sed 'h;s/=[^,]*//gp;g;s/[^:,=]*=//g' <in >out
MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;
    
por 29.12.2015 / 09:37
2

awk -F':|,|=' '{print $1":"$2","$4","$6"\n"$1":"$3","$5","$7}' FILE

Eu uso o "|" como OR para o FS, então basicamente o awk separa a linha em múltiplos componentes (tokens) usando ":" ou "," ou "=". Agora posso imprimir qualquer parte da linha em qualquer ordem, basta inserir "\ n" como nova linha para adicionar a segunda linha.

awk -F':|,|=' '{print $1":"$2","$4","$6"\n"$1":"$3","$5","$7}' <<< 'MOD MAXT:TID=TID190,MT=VCU,MAXT=100;' MOD MAXT:TID,MT,MAXT MOD MAXT:TID190,VCU,100;

    
por 29.12.2015 / 09:11
0

Perlishly:

perl -ne 'print /(.*:)/, join (",", /(\w+)=/g),"\n", /(.*:)/, join(",", /=([\w;]+)/g),"\n";'

Usamos a correspondência de padrão padrão (por exemplo, linha atual) e selecionamos grupos de captura via regex. (Que são então impressos)

Dá:

MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;
    
por 29.12.2015 / 14:24