awk 文件管理命令

awk 文件管理命令

我有一个文件,其中包含多行数据

editPin -pin phy_inst/i_dfi_row_cmd_p1_d[0] ctrl_soft_phy_inst/hbm_ch_tile_4_hbm_tile_inst/o_phy_row_cmd_p1[0] -assign {1443.0305 184.62} -layer M10 -pinWidth 0.038 -pinDepth 0.395 -fixOverlap false -fixedPin -snap MGRID
editPin -pin phy_inst/i_dfi_row_cmd_p1_d[1] ctrl_soft_phy_inst/hbm_ch_tile_4_hbm_tile_inst/o_phy_row_cmd_p1[0] -assign {1444.0305 185.62} -layer M10 -pinWidth 0.038 -pinDepth 0.395 -fixOverlap false -fixedPin -snap MGRID

我想执行一些操作,我想像这样设置我的线

eval editPin -pin i_dfi_row_cmd_p1_d[0]  -assign { 0 [ expr 1443.0305 184.62]} -layer M10 -pinWidth 0.038 -pinDepth 0.395 -fixOverlap false -fixedPin -snap MGRID
eval editPin -pin i_dfi_row_cmd_p1_d[1]  -assign { 0 [ expr 1444.0305 185.62]} -layer M10 -pinWidth 0.038 -pinDepth 0.395 -fixOverlap false -fixedPin -snap MGRID

我单独使用了这些命令,尝试了它们,它按照我想要的结构工作。

awk '{$4=""; print $0}' all_pin 
awk '{print "eval " $0}' all_pin 
sed -e /^editPin/'{ s#phy_inst/## ; s/{/{ 0 [ expr / ; s/}/]}/ ; }' all_pin

但是当我一起使用这些命令时,它没有给出我想要的结果

cat all_pin | awk '{$4=""; print $0}' all_pin | awk '{print "eval " $0}' all_pin | sed -e /^editPin/'{ s#phy_inst/## ; s/{/{ 0 [ expr / ; s/}/]}/ ; }' all_pin

我可以知道这个问题的解决方案吗

我想对这个块执行加法操作

-assign { 0 [ expr 1443.0305 362.764+X]}

X是一个常数值,我想添加X362.764 使用命令。我试过了,但得到了错误的答案

awk '{print $10+100}' all_pin

请帮助我摆脱困境

我所拥有的解决方案是

awk -v X=10000 -f SE.awk all_pin

###  SE.awk ###
 {  for(i=1; i<=NF ; i++ ) {
        if ( $i ~ /^phy_inst/ ) {
                $i=substr($i,10) ;
                $(i+1)="" ; }
        if ( $i == "-assign" ) {
                $(i+1)="{ 0 [ expr " $(i+1) ;
                $(i+2)=$(i+2) + X " ]}" ;
                }
 }
        $1 = "eval " $1 ;
         print ;
 }

但我正在尝试使用多个 awk 和 sed 命令编写单独的命令,请指导我删除最好的命令phy_inst/* 从行中执行算术运算 -分配 { 0 [ 表达式 1444.0305 185.62]}线

去除phy_inst/* 我尝试过这个命令

awk -F 'editPin/ ' '{print substr($3,10) $0}' all_pin

执行算术运算我不知道请指导我

答案1

你的无尽管道不是这样工作的;您没有修改文件,而是始终处理原始文件,并且您的结果将被丢弃。

鉴于您的输入始终相同,鉴于上述结构,请awk一次性尝试:

awk -v X=10000 '
        {$7 += X
         $7 =  $7 "]}"
         $6 =  "{ 0 [ expr " substr($6,2)
         $4 =  ""
         sub(/phy_inst\//,"")
         print "eval " $0
        }
' CONVFMT="%8.2f" file
eval editPin -pin i_dfi_row_cmd_p1_d[0]  -assign { 0 [ expr 1443.0305 10184.62]} -layer M10 -pinWidth 0.038 -pinDepth 0.395 -fixOverlap false -fixedPin -snap MGRID
eval editPin -pin i_dfi_row_cmd_p1_d[1]  -assign { 0 [ expr 1444.0305 10185.62]} -layer M10 -pinWidth 0.038 -pinDepth 0.395 -fixOverlap false -fixedPin -snap MGRID

它根据需要对各个字段进行操作,将X值添加到第七个字段,附加"]}",然后打印出以 开头的结果"eval"

相关内容