Как распечатать в следующем выводе

У меня есть эти данные со мной:

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|

И вывод должен быть похожим на этот:-

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

И мой сценарий - это:

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

Но так или иначе только $var печатает не другие. Почему? Какое-либо предложение/решение?

0
задан 3 January 2017 в 19:26

1 ответ

У Вас только есть 2 случая:

  1. 38= поле прибывает, перед 11= поле
  2. (Clientid) 38= поле прибывает после 11= поле

(Clientid) Поэтому KISS способ обработать файл

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

Тестирование:

$ sed -E \
>   -e 's/(Order):([0-9]*).*[,|]38=([0-9]*).*[,|]11=([0-9]*).*/\1-\2 38= \3 Clientid=\4/' \
>   -e 's/(Order):([0-9]*).*[,|]11=([0-9]*).*[,|]38=([0-9]*).*/\1-\2 38= \4 Clientid=\3/' \
>   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
1
ответ дан 7 November 2019 в 05:21

Другие вопросы по тегам:

Похожие вопросы: