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]}

엑스는 상수 값이고 추가하고 싶습니다.엑스도착하다362.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

필요에 따라 개별 필드에서 작동하고 X7번째 필드에 값을 추가하고 를 추가한 "]}"다음 로 시작하는 결과를 인쇄합니다 "eval".

관련 정보