Como imprimir na seguinte saída

0

Eu tenho estes dados comigo:

Order:479959,60=20130624-09:45:02.046|35=D|11=884|38=723|21=1|1=30532|10=085|59=0|114=Y|56=MBT|40=1|43=Y|100=MBTX|55=/GCQ3|49=11342|54=1|8=FIX.4.4|34=388|553=2453|9=205|52=20130624-09:45:02.046|
Order:24780,100=MBTX|43=Y|40=1|34=388|553=2453|52=2013062409:45:02.046|9=205|49=11342|54=1|8=FIX.4.4|55=/GCQ3|11=405|35=D|60=20130624-09:45:02.046|56=MBT|59=0|114=Y|10=085|21=1|38=470|1=30532|
Order:799794,55=/GCQ3|49=11342|54=1|8=FIX.4.4|34=388|553=2453|9=205|52=2013062409:45:02.046|40=1|43=Y|100=MBTX|38=350|21=1|1=30532|10=085|59=0|114=Y|56=MBT|60=20130624-09:45:02.046|35=D|11=216|
Order:72896,11=735|35=D|60=2013062409:45:02.046|56=MBT|59=0|114=Y|10=085|1=30532|38=17|21=1|100=MBTX|43=Y|40=1|553=2453|9=205|52=20130624-09:45:02.046|34=388|8=FIX.4.4|54=1|49=11342|55=/GCQ3|

E a saída deve ser assim: -

Order-479959 38= 723 Clientid=884
Order-24780 38= 470 Clientid=405
Order-799794 38= 350 Clientid=216
Order-72896 38= 17 Clientid=735

E meu roteiro é este:

while read number;do
var=$(sed  's/,.*//')
var2=$(sed 's/^.*[,|]11=\([^|]*\).*$/client id = /');
var3=$(sed 's/^.*[,|]38=\([^|]*\).*$/38  = /');
echo "$var"
echo "$var2"
echo "$var3"
#echo "$var,$var2,$var3"
done <report.txt

Mas de alguma forma, apenas $ var não está imprimindo os outros. Por quê? Alguma sugestão / solução?

    
por Sonal 04.01.2017 / 03:21

1 resposta

1

Você tem apenas dois casos:

  1. o campo 38= vem antes do campo 11= ( Clientid )
  2. o campo 38= vem depois do campo 11= ( Clientid )

Portanto, uma maneira do KISS de processar o arquivo é

sed -E \
  -e 's/(Order):([0-9]*).*[,|]38=([0-9]*).*[,|]11=([0-9]*).*/- 38=  Clientid=/' \
  -e 's/(Order):([0-9]*).*[,|]11=([0-9]*).*[,|]38=([0-9]*).*/- 38=  Clientid=/' \
  report.txt

Teste:

$ sed -E \
>   -e 's/(Order):([0-9]*).*[,|]38=([0-9]*).*[,|]11=([0-9]*).*/- 38=  Clientid=/' \
>   -e 's/(Order):([0-9]*).*[,|]11=([0-9]*).*[,|]38=([0-9]*).*/- 38=  Clientid=/' \
>   report.txt
Order-479959 38= 723 Clientid=884
Order-24780 38= 470 Clientid=405
Order-799794 38= 350 Clientid=216
Order-72896 38= 17 Clientid=735
    
por steeldriver 04.01.2017 / 04:09