我有以下数据:
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
你只有两种情况:
- 该
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