免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文本处理,多行匹配问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-01-04 16:54 |只看该作者 |倒序浏览
本帖最后由 xiaopolanglang 于 2015-01-04 16:56 编辑

在文件中有几百个电路定义,都是如下的格式:
   .subckt A 1 2 3
    --------
    .ends

   ------所代表的内容分两种,一种是带有某种关键字内容的,关键字是"$X=";另一种是不带有坐标信息的。

从文本里贴出实际例子吧,免得说不清楚。

.SUBCKT SHKA_XTR_3787591 1 2 3 4
** N=4 EP=4 IP=0 FDC=2
M0 2 4 1 2 N_12_LLRVT L=1e-07 W=1.2e-07 $X=260 $Y=0 $D=3
M1 3 1 2 2 N_12_LLRVT L=6e-08 W=2e-07 $X=675 $Y=-80 $D=3
.
ENDS

.SUBCKT SHKA_XTR_3233103 1 2 3
** N=3 EP=3 IP=0 FDC=1
M0 2 3 1 2 N_12_LLRVT L=6e-08 W=2e-07 $X=390 $Y=0 $D=3
.ENDS

.SUBCKT SHKA_CON_12084447
** N=1 EP=0 IP=0 FDC=0
.ENDS

.SUBCKT N_12_LLRVTRF D G S B
.ENDS

红字为匹配信息,第一个和第二个需要保留,第三个第四个需要过滤掉。需要说明的是,关键字是^M以及$X和$Y这一行,但是其内容不固定,而在subck和ends之间,匹配的行数就像上面一样,也不固定。

现在我的困惑是,需要先选出一段内容,
.subckt
------
.ends
   
然后判断这段内容中有没有关键字$X=,那么之前这段信息,是存在数组里还是文件里?我用csh熟悉一点(当然也是很菜),就想先逐行读这个文件A,把这段存在另一个文件里B,然后grep B $X=判断。
但是我不知道用csh怎么逐行读文件,请不吝赐教。
另外有没有更简单点的办法?

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
2 [报告]
发表于 2015-01-04 17:13 |只看该作者
本帖最后由 bulletmarquis 于 2015-01-04 17:15 编辑

回复 1# xiaopolanglang


    感觉用sed比较好,可惜不熟,awk的话,写法如下:
  1. awk '/^.S/{a=0}/^M/{a=1}{b=sprintf("%s%s\n",b,$0)}/^.E/&&a{print b}' file

  2. .SUBCKT SHKA_XTR_3787591 1 2 3 4
  3. ** N=4 EP=4 IP=0 FDC=2
  4. M0 2 4 1 2 N_12_LLRVT L=1e-07 W=1.2e-07 $X=260 $Y=0 $D=3
  5. M1 3 1 2 2 N_12_LLRVT L=6e-08 W=2e-07 $X=675 $Y=-80 $D=3.
  6. ENDS

  7. .SUBCKT SHKA_XTR_3233103 1 2 3
  8. ** N=3 EP=3 IP=0 FDC=1
  9. M0 2 3 1 2 N_12_LLRVT L=6e-08 W=2e-07 $X=390 $Y=0 $D=3
  10. .ENDS
复制代码

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
3 [报告]
发表于 2015-01-04 18:08 |只看该作者
  1. awk -v RS="ENDS" '{if($0~/M/&&/\$X/&&/\$Y/) print $0 RT}' file
  2. .SUBCKT SHKA_XTR_3787591 1 2 3 4
  3. ** N=4 EP=4 IP=0 FDC=2
  4. M0 2 4 1 2 N_12_LLRVT L=1e-07 W=1.2e-07 $X=260 $Y=0 $D=3
  5. M1 3 1 2 2 N_12_LLRVT L=6e-08 W=2e-07 $X=675 $Y=-80 $D=3.
  6. ENDS


  7. .SUBCKT SHKA_XTR_3233103 1 2 3
  8. ** N=3 EP=3 IP=0 FDC=1
  9. M0 2 3 1 2 N_12_LLRVT L=6e-08 W=2e-07 $X=390 $Y=0 $D=3
  10. .ENDS
复制代码
回复 1# xiaopolanglang


   

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
4 [报告]
发表于 2015-01-04 19:15 |只看该作者
你是需要匹配红字的行,还是匹配包括红字的块?

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
5 [报告]
发表于 2015-01-04 19:15 |只看该作者
你是需要匹配红字的行,还是匹配包括红字的块?

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
6 [报告]
发表于 2015-01-04 19:33 |只看该作者
sed练习
  1. sed '/\.SUBCKT/{:a;N;/.END/!ba;/\$X=/!d}'
复制代码

论坛徽章:
0
7 [报告]
发表于 2015-01-05 09:16 |只看该作者
玩玩,经不起考验。
  1. $>awk -vRS="\n\n+" '/\$X=/' urfile
复制代码

  1. .SUBCKT SHKA_XTR_3787591 1 2 3 4
  2. ** N=4 EP=4 IP=0 FDC=2
  3. M0 2 4 1 2 N_12_LLRVT L=1e-07 W=1.2e-07 $X=260 $Y=0 $D=3
  4. M1 3 1 2 2 N_12_LLRVT L=6e-08 W=2e-07 $X=675 $Y=-80 $D=3
  5. .ENDS
  6. .SUBCKT SHKA_XTR_3233103 1 2 3
  7. ** N=3 EP=3 IP=0 FDC=1
  8. M0 2 3 1 2 N_12_LLRVT L=6e-08 W=2e-07 $X=390 $Y=0 $D=3
  9. .ENDS
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-01-06 16:26 |只看该作者
回复 6# stupid_lee


    这个我试了,非常感谢。但是有个问题啊,这个是不是只能在bash下运行。用csh的话,报错:ba: Event not found
是不是因为只有bash支持!取反?如果换成咋csh执行的格式,要做什么修改么?

论坛徽章:
0
9 [报告]
发表于 2015-01-06 16:27 |只看该作者
回复 2# bulletmarquis
多谢啊,但是好像有的行过滤不掉,看起来还是用sed处理效果好一点。


   

论坛徽章:
2
摩羯座
日期:2014-11-03 15:28:56卯兔
日期:2015-01-04 17:20:51
10 [报告]
发表于 2015-01-06 17:06 |只看该作者
回复 9# xiaopolanglang


    需要过滤些什么?你在帖子里面没有贴出期望结果,我不知道要处理成啥样子,只是按自己的判断写的

   awk是可以完成你需要的功能的,当然可能写起来比sed要复杂一些
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP