Substitua o espaço por Pipe entre as tags

0

Eu tenho um arquivo que vem nas tags "{}". Precisa convertê-lo em um formato de tubo.

Aqui está a amostra:

{Id USXXXXXX} {Code USXXXXX} {Desc abcd 6.000% 5/24}

Resultado esperado 1:

{Id|USXXXXXX} {Code|USXXXXX} {Desc|abcd 6.000% 5/24}

Resultado esperado 2:

Id|USXXXXXX|Code|USXXXXX|Desc|abcd 6.000% 5/24
    
por user315521 12.10.2018 / 15:47

3 respostas

1

Como isso funcionará para você?

awk '{for(i=1; i<=NF; i++) {if ($i ~ /^{/) {printf("%s|", $i)} else {printf("%s ", $i)}} printf("\n")}' test.in

para o resultado esperado 1 e

awk '{for(i=1; i<=NF; i++) {if ($i ~ /^{/) {printf("%s|", $i)} else {printf("%s ", $i)}} printf("\n")}' test.in | sed -e 's#^{##' -e 's#} {#|#g' -e 's#} $##'

para o resultado esperado 2.

    
por 12.10.2018 / 16:07
0

Tente também

awk -F"{" '{for (i=2; i<=NF; i++) sub (" ", "|", $i)}1' OFS="{" file
{Id|USXXXXXX} {Code|USXXXXX} {Desc|abcd 6.000% 5/24}

e

awk -F"{" '{gsub (/}( |$)/, ""); for (i=2; i<=NF; i++) sub (" ", "|", $i); sub (/\|/, "")}1' OFS="|" file
Id|USXXXXXX|Code|USXXXXX|Desc|abcd 6.000% 5/24
    
por 12.10.2018 / 18:26
0

Para o resultado 1 abaixo está o comando

@praveen_2 ~]# echo "{Id USXXXXXX} {Code USXXXXX} {Desc abcd 6.000% 5/24}"| sed "s/{[A-Za-z]\{2,\}/&|/g"

saída

{Id| USXXXXXX} {Code| USXXXXX} {Desc| abcd 6.000% 5/24}

Para o resultado2 abaixo está o comando

echo "{Id USXXXXXX} {Code USXXXXX} {Desc abcd 6.000% 5/24}"| sed "s/\}//g"| sed 's/ {/|/g'| sed 's/^{//g'| sed 's/ [a-zA-Z]\{2,\}/|&/g'

saída

Id| USXXXXXX|Code| USXXXXX|Desc| abcd 6.000% 5/24
    
por 13.10.2018 / 02:13