awk 파일에 스키마 구성

awk 파일에 스키마 구성

결국 awk 스크립트에서 사용할 스키마 pn_ere, beg_ere, 및 bash 스크립트를 작성 중입니다. 사용자가 전체 , 및 를 전달하는 대신 및 값을 제공 end_ere할 수 있는 awk 스크립트 내에서 스키마를 구성하고 싶습니다 . 어떻게 변경하나요?famlasmbpn_erebeg_ereend_ere

  nfaml=${faml:-"[[:graph:]]+"}  # Use GPH if FAML null ("" or '')
  nasmb=${asmb:-"[[:graph:]]+"}  # Use GPH if ASMB null ("" or '')
  kw=".*"

  ## Pattern pn_ere matches comment characters.  ## ;; !! @c //
  local pn_ere="^[[:space:]]*([#;!]+|@c|//)[[:space:]]+"

  beg_ere="${pn_ere}(${nfaml}) ${ebl}(${nasmb})${ebr}${spc}(${kw})$"
  end_ere="${pn_ere}END OF ${nfaml} ${ebl}${nasmb}${ebr}${spc}$"

  awk -f "${trk}"/densel -v pn_ere="$pn_ere"  \
      -v beg_ere="$beg_ere" -v end_ere="$end_ere"  \
      "$filename"

답변1

이것이 당신이 원하는 것입니까(테스트되지 않음)?

nfaml=${faml:-"[[:graph:]]+"}  # Use GPH if FAML null ("" or '')
nasmb=${asmb:-"[[:graph:]]+"}  # Use GPH if ASMB null ("" or '')
kw='.*'

awk -v nfaml="$nfaml" -v nasmb="$nasmb" -v kw="$kw" '
  BEGIN {
    ebl = "foo"
    ebr = "bar"
    spc = "whatever"

    ## Pattern pn_ere matches comment characters.  ## ;; !! @c //
    pn_ere = "^[[:space:]]*([#;!]+|@c|//)[[:space:]]+"

    beg_ere = sprintf("%s(%s) %s(%s)%s%s(%s)$", pn_ere, nfaml, ebl, nasmb, ebr, spc, kw)
    end_ere = sprintf("%sEND OF %s %s%s%s%s$", pn_ere, nfaml, ebl, nasmb, ebr, spc)
  }

  <... rest of script using the above ...>
' "$filename"

예를 들어 다음과 같이 연결하여 beg_ere와 end_ere를 설정할 수도 있습니다.

beg_ere = pn_ere "(" nfaml ") " ebl "(" nasmb ")" ebr spc "(" kw ")$"

sprintf()그러나 IMHO, 문자열이 길면 데이터에서 형식을 분리하는 것이 더 깨끗하고 간단합니다.

관련 정보