免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4372 | 回复: 15

[文本处理] 对含有指定关键字的一行进行文本处理 [复制链接]

论坛徽章:
0
发表于 2014-11-05 15:45 |显示全部楼层
本帖最后由 luobingyin 于 2014-11-05 15:58 编辑

最近遇到了一个linux文本处理的问题,原文本是一个电路网表,但是因为模型有变需要对这个电路网表进行修改,电路网表大致是这样的:
问题1:
xm0 net525 vdda net654 net653 net525 mn25vtdn w=5e-6 l=1.2e-6 mt=1

现在我需要将这一行网表改成如下格式:
xm0 net525 vdda net654 psub mn24vt w=5e-6 l=1.2e-6 mf=1

也就是需要将mn25vtdn替换为mn24vt,将mt=替换为mf=,同时还需要将原网表中第5、6两个字符串删除并插入固定字符串psub。前两个替换自己可以解决,后两个要求因为网表中有很多行,只有关键字含有mn25vtdn的才需要做这种替换,而其他行数不能改变,想请问各位大神该如何操作,烦请提供一下思路,不胜感激。

问题2:
原网表
m0 net1 net32 gnd gnd mn w=5e-6 l=2e-6
需要改成
xm0 net1 net32 gnd gnd mn w=5e-6 l=2e-6
即在含有“ mn ”关键字的一行的行首添加一个“x”,该如何操作?

问题3:
我想把写好的shell变成一个可执行文件,例如文件名为change.csh,当我想对一个网表进行替换操作时只需要输入./change.csh 操作网表,即可自动完成转换,该怎么弄,这个想了很久,由于对linux不太熟悉(自己的设计电路的),希望各位大神不吝赐教,谢谢。

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-11-05 15:52 |显示全部楼层
回复 1# luobingyin

问题1:LZ说错了吧,不是第4、第5个字段,是第5、第6个字段吧?
  1. awk '/mn25vtdn/{gsub(/mt=/,"mf=");gsub(/mn25vtdn/,"mn24vt");$6="";$5="psub"}1' file
复制代码

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-11-05 15:52 |显示全部楼层
回复 1# luobingyin


问题2:
  1. awk '/mn/{$0="x"$0}1' file
复制代码

论坛徽章:
0
发表于 2014-11-05 15:53 |显示全部楼层
回复 2# bulletmarquis


    数错了,感谢提醒,更感谢提供的表达式

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-11-05 15:54 |显示全部楼层
回复 1# luobingyin


    问题3:

   不太明白LZ的意思,不过可以在shell里面使用$1读取参数,然后把上面的命令里面的file改为$1,调用shell的时候按./xxx.sh xxxxxx来执行

论坛徽章:
0
发表于 2014-11-05 15:58 |显示全部楼层
回复 5# bulletmarquis


    就是我想把这两个awk语句写在一个文件里,下次再需要转换网表的时候直接把这个文件拿出来用,直接source这个文件+我需要转换的网表,就能自动完成, 我比较懒,呵呵想搞成那种可以自动处理的。

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
发表于 2014-11-05 16:03 |显示全部楼层
回复 6# luobingyin


    可以的

  1. cat <<@@@ > a.sh

  2. #!/bin/sh

  3. file=$1

  4. awk xxxxx  $1

  5. exit

  6. @@@

  7. chmod +x a.sh

  8. ./a.sh  filename

复制代码

论坛徽章:
0
发表于 2014-11-05 16:51 |显示全部楼层
本帖最后由 luobingyin 于 2014-11-05 16:55 编辑

回复 7# bulletmarquis


    非常感谢,这可帮了我的大忙了,不过有一点点不太了解,awk中{}后面那个1是什么意思呀?
另外awk能否在源文件上修改,以前查好像是不能,当我要一次用很多awk语句的时候难道还要弄好几个中间文件?

论坛徽章:
8
戌狗
日期:2014-09-26 16:39:44水瓶座
日期:2014-10-10 02:06:57金牛座
日期:2014-10-11 23:04:042015亚冠之首尔
日期:2015-06-23 15:37:0015-16赛季CBA联赛之天津
日期:2016-01-22 18:58:2915-16赛季CBA联赛之佛山
日期:2016-05-31 19:18:0815-16赛季CBA联赛之同曦
日期:2016-08-10 16:26:3315-16赛季CBA联赛之辽宁
日期:2018-01-10 11:47:40
发表于 2014-11-05 16:54 |显示全部楼层
本帖最后由 wiliiwin 于 2014-11-05 16:56 编辑

回复 8# luobingyin

print $0


   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-11-05 16:54 |显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时9.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP