发布网友 发布时间:2022-04-23 13:25
共3个回答
热心网友 时间:2022-05-03 22:47
1.先将你上面的文本保存为文件 ts.txt
2.保存如下脚本为ts.sh并修改可执行权限。
#!/bin/bash
cat ts.txt |gawk '/IOPATH/ {if (gsub(/\(|\)/,"")) {
t1=$1;t2=$2;t3=$3;
split($4,value1,":");v1=value1[1];v2=value1[2];v3=value1[3];
split($5,value2,":");v11=value2[1];v22=value2[2];v33=value2[3];
print "\t("t1" " t2" " t3 " ("v1*10":"v2*10":"v3*10") ("v11*10":"v22*10":"v33*10"))"};
next} {print}'
3. # ./ts.sh >ts1.txt
4. # more ts1.txt 输出如下,按照你的要求每个数*10
(CELL
(CELLTYPE "OR2X1")
(INSTANCE U2604)
(DELAY
(ABSOLUTE
(IOPATH A Y (6.5:6.5:6.5) (4.57:4.57:4.57))
(IOPATH B Y (6.08:6.08:6.08) (6.82:6.82:6.82))
)
)
)
(CELL
(CELLTYPE "OAI21XL")
(INSTANCE U2603)
(DELAY
(ABSOLUTE
(IOPATH A0 Y (1.11:1.11:1.11) (0.49:0.49:0.49))
(IOPATH A1 Y (3.11:3.11:3.11) (-0.37:-0.37:-0.37))
(IOPATH B0 Y (1.86:1.88:1.88) (0.62:0.62:0.62))
)
)
)
5. # diff ts.txt ts1.txt 比较结果输出如下
6,7c6,7
< (IOPATH A Y (0.650:0.650:0.650) (0.457:0.457:0.457))
< (IOPATH B Y (0.608:0.608:0.608) (0.682:0.682:0.682))
---
> (IOPATH A Y (6.5:6.5:6.5) (4.57:4.57:4.57))
> (IOPATH B Y (6.08:6.08:6.08) (6.82:6.82:6.82))
16,18c16,18
< (IOPATH A0 Y (0.111:0.111:0.111) (0.049:0.049:0.049))
< (IOPATH A1 Y (0.311:0.311:0.311) (-0.037:-0.037:-0.037))
< (IOPATH B0 Y (0.186:0.188:0.188) (0.062:0.062:0.062))
---
> (IOPATH A0 Y (1.11:1.11:1.11) (0.49:0.49:0.49))
> (IOPATH A1 Y (3.11:3.11:3.11) (-0.37:-0.37:-0.37))
> (IOPATH B0 Y (1.86:1.88:1.88) (0.62:0.62:0.62))
从以上比较的结果可以看出每个符合要求的值都乘以了10.
希望能帮你解决
热心网友 时间:2022-05-04 00:05
通配符没用啦,还要*10 替换,还是写个脚本运行啦。。
热心网友 时间:2022-05-04 01:39
linux 的 强大 功能 就是 匹配、替换
可以用 脚本 完成 吧
建议 去 大论坛 看看,那里高手林立
如
UC unix-center
CU chinaunix追问我就是处理数据的时候想到,可以依靠脚本来完成,但是没搞过这些,一点思路没有