複数行のデータを含むファイルがあります。
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は定数値であり、追加したいと思います。X到着362.764 コマンドを使用します。試してみましたが、間違った答えを受けました。
awk '{print $10+100}' all_pin
助けてください
ベストアンサー1
結合コマンドでも、パイプラインの各エントリのソースファイルを指定します。
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 # ^source ^again ^and again ^and still again
代わりに、各コマンドに前のコマンドを読み取る必要があります。ここでは、2つのコマンドを組み合わせてawk
不要なコマンドを削除しましたcat
。
awk '{ $4=""; print "eval " $0}' all_pin |
sed -e '/^editPin/ { s#phy_inst/## ; s/{/{ 0 [ expr / ; s/}/]}/ ; }'
私の答えに依存コメントの質問2番目の部分も同様に簡単です。これに応じて回答を更新します。