awk处理案例十九--gensub函数的用法

【需求】

我的初始文件如下:
CKBD2BWP7T 8 15 60 CKBD2BWP7T RDT_CKB_00 (:I(1'b0), :Z());
DFNCND2BWP7T 1 15 15 DFNCND2BWP7T RDT_DFNCN_00 (:CPN(1'b0), :D(1'b0), :Q(), :QN(), :CDN(1'b0));
LNCND2BWP7T 2 15 30 LNCND2BWP7T RDT_LNCN_00 (:EN(1'b0), :D(1'b0), :Q(), :QN());
我想用sed命令做成如下格式:
CKBD2BWP7T:I
DFNCND2BWP7T:CPN
DFNCND2BWP7T:D
DFNCND2BWP7T:CDN
LNCND2BWP7T:EN
LNCND2BWP7T:D

 【思路】大概就是提取每一行的首字符串以及该行中带有(1'b0)字符的字符串大写字母,如果某一行含有n个(1'b0)字符的字符串,就要将该行首字符串提取n次

【代码】

 

> awk '{for(i=7;i<=NF;i++){if($i~/b0/){l=split($i,a,"(");print l==3?$1 a[2]:$1 a[1]}}}' lottu07
CKBD2BWP7T:I
DFNCND2BWP7T:CPN
DFNCND2BWP7T:D
DFNCND2BWP7T:CDN
LNCND2BWP7T:EN
LNCND2BWP7T:D

 

 【解析】

   根据代码;解题思路跟上面一样;里面用到了split函数的用法;考虑到“(:CPN(1'b0),”和“:D(1'b0),”的区别;所以才做了一个判断!

  【拓展】

 这还有reyleon兄的代码;其中用到gensub函数;相知该函数的用法;请关注gensub,sub,gsub的区别!

awk '{for(i=1;i<=NF;i++)if($i~/b0/)print $1":"gensub(/.*:([A-Z]+).*/,"\\1",1,$i)}' file

 

 

 

posted @ 2013-12-03 21:30  lottu  阅读(1783)  评论(0)    收藏  举报