免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1439 | 回复: 7
打印 上一主题 下一主题

文件处理,用shell实现!求助! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-20 17:07 |只看该作者 |倒序浏览
哪位高人能指点指点!

原文件如下:
*generated on jun 20 2003
*global net definitions
.global vdd! gnd!
*this is a netlist for circuit
XI69 net3 net9 INV1X_G1
R0 net9 out 1E3 L=2E-6
XI23 net7 net8 9E-3
V1 VDD! 0 5.0
V0 net15 0 pulse
*fadskfalsdfkjalsd
*afsdkfjhasdkfhaksd*lkajsdfhkasd
XC0 out 0 CPIP
.SUBCKT INV1X_G1 A Y
XI3 Y A 0 nmos_1
XI2 Y A 0 pmos_1
.SUBCKT nmos_1 D G S
M0 D G S 0 nmos
.ENDS nmos_1
.SUBCKT pmos_1 D G S
M0 D G S 0 pmos
.ENDS pmos_1
.ENDS INV1X_G1
.TEMP 25.0
.PROBE DC V(net9)
.OPTION INGOLD=2 ARTIST=2 PSF=2
+  PROBE=0
+  GCHUNT=1
.DC VDD! 0 5

现在需要编写一个shell程序(用bshell、awk、sed)来处理这个文件
要求:
1.把在文件中第一个出现以 XI 开头的这一行的最后一个字段变成PRENET
2。把所有带.SUBCKT和.ENDS的句子以及它们之间的句子都删除!
3。把 .OPTION INGOLD=2 ARTIST=2 PSF=2变成.OPTION post
4. 把 +  PROBE=0这句删除  
5。加一句 .inc "tmp" 到此文件中,位置不限!

要求经过shell的处理后把上述文件变成如下
*generated on jun 20 2003
*global net definitions
.global vdd! gnd!
*this is a netlist for circuit
XI69 net3 net9 PRENET
R0 net9 out 1E3 L=2E-6
XI23 net7 net8 9E-3
V1 VDD! 0 5.0
V0 net15 0 pulse
*fadskfalsdfkjalsd
*afsdkfjhasdkfhaksd*lkajsdfhkasd
XC0 out 0 CPIP
.inc "tmp"
.PROBE DC V(net9)
.OPTION post
+  GCHUNT=1
.DC VDD! 0 5

论坛徽章:
0
2 [报告]
发表于 2003-06-20 18:15 |只看该作者

文件处理,用shell实现!求助!

sed -e '/\.SUBCKT/,/\.ENDS/d' -e 's/.OPTION INGOLD=2 ARTIST=2 PSF=2/.OPTION post/' -e '/\+ PROBE=0/d' -e '/\.ENDS/d' information | awk 'BEGIN{first=0}{if(first==0){if($0~/^XI/){$4="RENET";first=1}};print$0}' > newfile

论坛徽章:
0
3 [报告]
发表于 2003-06-20 20:02 |只看该作者

文件处理,用shell实现!求助!

anonimousboy :
能不能只使用SED实现呢?
谢谢了, 我想看看。。。

论坛徽章:
0
4 [报告]
发表于 2003-06-21 04:53 |只看该作者

文件处理,用shell实现!求助!

原帖由 "peterbingxu" 发表:
anonimousboy :
能不能只使用SED实现呢?
谢谢了, 我想看看。。。


   
可以这样写,

  1. sed '{
  2.       1,/XI/ {
  3.       s/\(XI.*\ \)..*/\1PRENET/
  4.       }
  5.       /.SUBCKT/,/.ENDS/d
  6.       s/.OPTION INGOLD=2 ARTIST=2 PSF=2/.OPTION post/g
  7.       /+ PROBE=0/d
  8.       $a\
  9. .inc "tmp"
  10. }' file
复制代码



运行结果:

*global net definitions
.global vdd! gnd!
*this is a netlist for circuit
XI69 net3 net9 PRENET
R0 net9 out 1E3 L=2E-6
XI23 net7 net8 9E-3
V1 VDD! 0 5.0
V0 net15 0 pulse
*fadskfalsdfkjalsd
*afsdkfjhasdkfhaksd*lkajsdfhkasd
XC0 out 0 CPIP
.ENDS INV1X_G1
.TEMP 25.0
.PROBE DC V(net9)
.OPTION post
+ GCHUNT=1
.DC VDD! 0 5
.inc "tmp"


输出跟楼主的有细微差别,原因,

1。.TEMP 25.0 这一行楼主没有作交待,
2。 楼主要求“把所有带.SUBCKT和.ENDS的句子以及它们之间的句子都删除!”,
  但是提供的原文件 .SUBCKT和.ENDS 不成对。

论坛徽章:
0
5 [报告]
发表于 2003-06-21 07:56 |只看该作者

文件处理,用shell实现!求助!

[quote="红袖添香"]
其实俺也发现这个问题了,不过昨天太忙,就没和楼住说~~嘿嘿~~

论坛徽章:
0
6 [报告]
发表于 2003-06-27 11:05 |只看该作者

文件处理,用shell实现!求助!

请教版主:

   你写的shell里面的first=0  first==0  以及fiest=1都是什么意思啊,给兄弟我解释一下吧!

论坛徽章:
0
7 [报告]
发表于 2003-06-27 11:46 |只看该作者

文件处理,用shell实现!求助!

你学习一下AWK吧!
http://chinaunix.net/forum/viewtopic.php?t=19838&highlight=awk

论坛徽章:
0
8 [报告]
发表于 2003-07-04 15:55 |只看该作者

文件处理,用shell实现!求助!

在solaris下执行报错
bash: syntax error near unexpected token `'BEGIN{first=0}{if(f'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP