免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 853 | 回复: 7

[文本处理] 提取信息,替换并且打印 [复制链接]

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2018-07-05 17:37 |显示全部楼层
本帖最后由 南武水寿 于 2018-07-05 17:43 编辑

请教大家:
原始脚本:
current_instance {core}
insert_buffer [get_pins {hehe/A}]   BUFX2 -new_net_names {NET1} -new_cell_names {BUF1} -location {3604 122} -orientation FS
insert_buffer [get_pins {nono/A}]   BUFX2 -new_net_names {NET2} -new_cell_names {BUF2} -location {3605 123} -orientation FS
size_cell {FE1} {INVX1}
set_cell_location -coordinates {2841 1305} -orientation S [get_cells {FE1}]
current
_instance
......
然后每段都是current_instance开头和结尾的循环下去 (正确显示请参见附件 图片11,原始文本总共6行:
current_instance, insert_buffer,insert_buffer,size_cell,set_cell_location,current_instance

希望输出格式: (要求抓取每段中有颜色的内容抓出来,重新组织,打印成如下内容(总共三行))
AddRepeater -term {core/hehe/A} -cell BUFX2 -hinstGuide core -name BUF1 -loc {3604 122} -bufOrient FS
AddRepeater -term {core/nono/A} -cell BUFX2 -hinstGuide core -name BUF2 -loc {3605 123} -bufOrient FS
ChangeCell -inst core/FE1 -cell INVX1 -loc {2841 1305} -orient S

主要是不知道怎么抓出{}里面的内容,与core关键字组合起来: 文本格式请参见附件图片11
谢谢!





显示问题

显示问题

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2018-07-05 19:58 |显示全部楼层
琢磨了一下,自己写了个复杂的:
awk '$1~/current_instance/&&NF>1{gsub("{","",$2);gsub("}","",$2);a=$2} $1~/insert_buffer/{gsub("{","",$3);gsub("}","",$3);gsub("]","",$3);b=$3; c=$4; gsub("{","",$;gsub("}","",$;d=$8; e=$10; d=$11 ; print a"/"b}'

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2018-07-05 19:59 |显示全部楼层
琢磨了一下,自己写了个复杂的:
awk '$1~/current_instance/&&NF>1{gsub("{","",$2);gsub("}","",$2);a=$2} $1~/insert_buffer/{gsub("{","",$3);gsub("}","",$3);gsub("]","",$3);b=$3; c=$4; gsub("{","",$;gsub("}","",$;d=$8; e=$10; d=$11 ; print a"/"b}'
大概这个思路

论坛徽章:
1
狮子座
日期:2015-01-07 16:40:55
发表于 2018-07-05 19:59 |显示全部楼层
琢磨了一下,自己写了个复杂的:
awk '$1~/current_instance/&&NF>1{gsub("{","",$2);gsub("}","",$2);a=$2} $1~/insert_buffer/{gsub("{","",$3);gsub("}","",$3);gsub("]","",$3);b=$3; c=$4; gsub("{","",$;gsub("}","",$;d=$8; e=$10; d=$11 ; print a"/"b}'
大概这个思路

论坛徽章:
21
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之深圳
日期:2018-06-15 14:59:3715-16赛季CBA联赛之八一
日期:2018-07-03 16:56:4615-16赛季CBA联赛之八一
日期:2018-07-05 10:34:09黑曼巴
日期:2018-07-06 15:19:5015-16赛季CBA联赛之佛山
日期:2018-08-03 13:19:3315-16赛季CBA联赛之山西
日期:2018-08-07 19:46:2315-16赛季CBA联赛之广夏
日期:2018-08-08 19:31:5015-16赛季CBA联赛之青岛
日期:2018-11-26 15:21:5015-16赛季CBA联赛之青岛
日期:2018-06-08 13:45:2815-16赛季CBA联赛之同曦
日期:2018-06-04 19:42:2015-16赛季CBA联赛之山东
日期:2018-05-30 12:44:59
发表于 2018-07-06 12:13 |显示全部楼层
回复 1# 南武水寿


  1. awk '/current_instance {/{split($0,t,"[{}]");a=t[2]}/insert_buffer/{split($0,t,"[{}]");b1=t[2];b2=$4;b3=t[6];b4=t[8];printf("AddRepeater -term {%s/%s} -cell %s -hinstGuide %s -name %s -loc {%s} -bufOrient FS\n",a,b1,b2,a,b3,b4)}/size_cell {/{split($0,t,"[{}]");c1=t[2];c2=t[4]}/set_cell_location/{split($0,t,"[{}]");c3=t[2];c4=t[4];printf("ChangeCell -inst %s/%s -cell %s -loc {%s} -orient S\n",a,c4,c2,c3)}' file
复制代码

论坛徽章:
3
15-16赛季CBA联赛之青岛
日期:2018-07-09 14:17:2815-16赛季CBA联赛之八一
日期:2018-08-06 15:30:0515-16赛季CBA联赛之广东
日期:2018-08-09 09:11:21
发表于 2018-07-06 12:42 |显示全部楼层
本帖最后由 christmas1102 于 2018-07-06 12:44 编辑
  1. #!/bin/bash
  2. set -- $(grep -Po '(?<=\{|\s)((?!NET|S)\w+((\pP|\s)\w+)?)(?=\}|\s)' 原文本)
  3. echo "AddRepeater -term {$1/$2} -cell $3 -hinstGuide $1 -name $4 -loc {$5 $6} -bufOrient FS
  4. AddRepeater -term {$1/$7} -cell $8 -hinstGuide $1 -name $9 -loc {${10} ${11}} -bufOrient FS
  5. ChangeCell -inst $1/${12} -cell ${13} -loc {${14} ${15}} -orient S"
复制代码

论坛徽章:
0
发表于 2018-07-06 15:03 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2018-07-06 15:13 编辑

疑问:
-orientation S [get_cells {FE1}]   最后的fe1好像没用到。

系统需求:
win + powershell 5.0  

  1. $模板 =
  2. @'
  3. current_instance \{{字段a*:core}\}
  4. insert_buffer [get_pins \{{字段b:hehe/A}\}]   {字段c:BUFX2} -new_net_names \{NET1\} -new_cell_names \{{字段d:BUF1}\} -location {字段e:\{3604 122\}} -orientation FS
  5. insert_buffer [get_pins \{{字段f:nono/A}\}]   {字段g:BUFX2} -new_net_names \{NET2\} -new_cell_names \{{字段h:BUF2}\} -location {字段i:\{3605 123\}} -orientation FS
  6. size_cell \{{字段j:FE1}\} \{{字段k:INVX1}\}
  7. set_cell_location -coordinates {字段l:\{2841 1305\}} -orientation S [get_cells \{{字段m:FE1}\}]
  8. current_instance \{{字段a*:core}\}
  9. '@


  10. $输出 =
  11. @"
  12. AddRepeater -term {0}{1}/{2}{3} -cell {4} -hinstGuide {5} -name {6} -loc {7} -bufOrient FS
  13. AddRepeater -term {8}{9}/{10}{11} -cell {12} -hinstGuide {13} -name {14} -loc {15} -bufOrient FS
  14. ChangeCell -inst {16}/{17} -cell {18} -loc {19} -orient S
  15. "@


  16. $ufile = Get-Content -raw -Path 'a:\pscode\0\convert_from_string\20180705\aaa.txt'
  17. $导入后的对象 = ConvertFrom-String  -TemplateContent $模板  -InputObject  $ufile
  18. $导入后的对象


  19. foreach ($temp in $导入后的对象)
  20. {
  21.         $输出 -f `
  22.         '{',$temp.'字段a', $temp.'字段b','}',$temp.'字段c',$temp.'字段a',$temp.'字段d',$temp.'字段e',
  23.         '{',$temp.'字段a', $temp.'字段f','}',$temp.'字段g',$temp.'字段a',$temp.'字段h',$temp.'字段i',
  24.         $temp.'字段a', $temp.'字段j',$temp.'字段k',$temp.'字段l'
  25. }

复制代码


====================================
测试数据的输出

字段a : core
字段b : hehe/A
字段c : BUFX2
字段d : BUF1
字段e : {3604 122}
字段f : nono/A
字段g : BUFX2
字段h : BUF2
字段i : {3605 123}
字段j : FE1
字段k : INVX1
字段l : {2841 1305}
字段m : FE1

字段a : core
字段b : hehe/A
字段c : BUFX2
字段d : BUF1
字段e : {3604 122}
字段f : nono/A
字段g : BUFX2
字段h : BUF2
字段i : {3605 123}
字段j : FE1
字段k : INVX1
字段l : {2841 1305}
字段m : FE1

AddRepeater -term {core/hehe/A} -cell BUFX2 -hinstGuide core -name BUF1 -loc {3604 122} -bufOrient FS
AddRepeater -term {core/nono/A} -cell BUFX2 -hinstGuide core -name BUF2 -loc {3605 123} -bufOrient FS
ChangeCell -inst core/FE1 -cell INVX1 -loc {2841 1305} -orient S
AddRepeater -term {core/hehe/A} -cell BUFX2 -hinstGuide core -name BUF1 -loc {3604 122} -bufOrient FS
AddRepeater -term {core/nono/A} -cell BUFX2 -hinstGuide core -name BUF2 -loc {3605 123} -bufOrient FS
ChangeCell -inst core/FE1 -cell INVX1 -loc {2841 1305} -orient S





=============================================
啥才叫抽象? 万般变化,不离其宗。
powershell强 , 只需要换换模板,基本不需要重写代码。

win + powershell 5 + convertfrom-string + 做模板
http://bbs.chinaunix.net/thread-4258566-1-1.html
http://bbs.chinaunix.net/thread-4290779-1-1.html
http://bbs.chinaunix.net/thread-4296489-1-1.html

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2018-07-07 10:24 |显示全部楼层
# [ /home/soio/1bs/awks ] {2018-07-07 10:22:18}
: 1530930138:0;➜  sed 's/insert_buffer \[get_pins /AddRepeater -term /g;s/{hehe\/A}/{core\/hehe\/A}/g;s/{nono\/A}/{core\/nono\/A}/g;s/\]   / -cell /g;s/ \-new_net_names {NET[1|2]} -new_cell_names / -hinstGuide core -name /g;s/\({\)\(BUF[1|2]\)\(}\)/\2/g;s/-location/-loc/g;s/-orientation/-bufOrient/g;s/set_cell_location -coordinates/ChangeCell -inst core\/FE1 -cell INVX1 -loc/g;s/-bufOrient S \[get_cells {FE1}\]/-orient S/g;/^size_cell {.*}$/d;/^current_instance/d;s/core/\x1b[01;31m&\x1b[0m/g;s/BUFX[0-9]\|INVX1/\x1b[01;32m&\x1b[0m/g;s/BUF[0-9]/\x1b[01;34m&\x1b[0m/g;s/{[0-9][0-9]* [0-9][0-9]*}/\x1b[01;33m&\x1b[0m/g;s/FEI\|hehe\/A\|nono\/A/\x1b[01;35m&\x1b[0m/g' 1.col.kwa
AddRepeater -term {core/hehe/A} -cell BUFX2 -hinstGuide core -name BUF1 -loc {3604 122} -bufOrient FS
AddRepeater -term {core/nono/A} -cell BUFX2 -hinstGuide core -name BUF2 -loc {3605 123} -bufOrient FS
ChangeCell -inst core/FE1 -cell INVX1 -loc {2841 1305} -orient S

#--#
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

数据风云,十年变迁
DTCC 第十届中国数据库技术大会已启航!

2019年5月8日~5月10日,由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会(DTCC2019),将在北京隆重召开。大会将邀请百余位行业专家,就热点技术话题进行分享,是广大数据领域从业人士的又一次年度盛会和交流平台。与SACC2018类似,本届大会将采用“3+2”模式:3天传统技术演讲+2天深度主题培训。大会不仅提供超100场的主题演讲,还会提供连续2天的深度课程培训,深化数据领域的项目落地实践方案。
DTCC2019,一场值得期待的数据技术盛会,殷切地希望您报名参与!

活动入口>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP