输入文件是:
a.txt
a PIC x(1).
FILLER PIC X(2).
c PIC s9(9)v99 COMP-3.
FILLER PIC x(1).
d PIC s9(7)v999 COMP-3.
输出(执行test.sh
(sh test.sh a.txt
)后,创建tmp_a.txt
个文件。),tmp_a.txt
:
a char(1).
FILLER_1 char(2).
c PIC s9(9)v99 COMP-3.
FILLER_2 char(1).
d PIC s9(7)v999 COMP-3.
预期,tmp_a.txt
:
a char(1).
FILLER_1 char(2).
c decimal(9,2).
FILLER_2 char(1).
d PIC decimal(7,3).
代码,test.sh
:
cb=$1
tmp_cb=tmp_$1
cp ${cb} ${tmp_cb}
sed -i 's/PIC x(/char(/gI' ${tmp_cb}
If [ $(grep -c "FILLER" ${tmp_cb}) -gt 1 ]
then
awk -i inplace '/FILLER/ {c++;gsub("FILLER","FILLER_"c,$1)}{print $0}' ${tmp_cb}
fi
根据我的代码,我根据要求将PIC x(
转换为char(
&如果需要,最终给予FILLER的复发值。但是要将s9(9)v99与其实际值进行转换,我甚至都不知道。请帮我这样做。
让每个人都明白背后的逻辑:
PIC s9(9)v99 COMP-3 - >如果出现此格式,则为十进制数据类型。 十进制(长度,比例)---> s9(x)&中的长度= x字母'v'后出现9。
所以请提出解决问题的想法。