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

浙公网安备 33010602011771号