如何打印以下输出

如何打印以下输出

我有以下数据:

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 打印,其他的都没有。为什么?有什么建议/解决方案吗?

答案1

你只有两种情况:

  1. 38=字段位于11=( Clientid) 字段之前
  2. 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

相关内容