У меня есть эти данные со мной:
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 печатает не другие. Почему? Какое-либо предложение/решение?
У Вас только есть 2 случая:
38=
поле прибывает, перед 11=
поле 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