Unix脚本将特定的字符串模式转换为另一个

时间:2018-02-11 14:49:47

标签: shell sh

输入文件是:

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.shsh 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。

所以请提出解决问题的想法。

0 个答案:

没有答案