sed 'h;s/=[^,]*//gp;g;s/[^:,=]*=//g' <in >out
MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;
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;
sed 'h;s/=[^,]*//gp;g;s/[^:,=]*=//g' <in >out
MOD MAXT:TID,MT,MAXT
MOD MAXT:TID190,VCU,100;
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;
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;
Tags text-processing