Awkマルチプレゼンテーションの問題

Awkマルチプレゼンテーションの問題

以下のコードにどのような問題があるのか​​、誰でも助けることができますか? - ヘッダー付きの固定幅ファイルがあり、ファイルからnull値を計算しようとしています。 null パターン $col_null_patt=\s があり、列の開始と列の長さを使用してファイル内の列を部分文字列で囲み、正規表現の一致を試みます。

質問:-

awk: cmd. line:1: BEGIN {m = ENVIRON["RE"]} c=substr($0,m,p);if($n ~ "^" m "$"{N++} END{print N+0}
awk: cmd. line:1:                                            ^ syntax error

コードは以下のように表示されます。

 thres=$( RE="$col_null_patt" 
           awk  -v m="$col_start" -v p="$col_len" 
           'BEGIN {n= ENVIRON["RE"]} 
            c=substr($0,m,p);
            if(NR >1 && c ~ "^" n "$"{N++} END{print N+0}' "$cp_input")

答え1

thres=$(
  RE="$col_null_patt" awk -v m="$col_start" -v p="$col_len" '
    # condition                action
    BEGIN                      {re = ENVIRON["RE"]} 
                               {c = substr($0,m,p)}
    NR > 1 && c ~ "^(" re ")$" {N++}
    END                        {print N+0}
    ' < "$cp_input"
)
  • に環境変数をVAR=value awk...渡す必要があります。を使用するには、シェル変数を定義してから呼び出すだけです(事前にエクスポートされた場合にのみの環境にあります)。VARawkVAR=value␤awk$VARawkVARawk
  • awkパターンの説明に従うことを忘れないでくださいcondition { action }。各入力レコードに対して実行するには、c=substr($0,m,p)trueと評価される条件部分があるか、条件部分がないジョブセクションにそれを入れる必要があります。

しかし、\s(空白文字を意味する)は標準ではなく、少数のawk実装で理解されています。col_null_patt='[[:space:]]'標準となり、携帯性が向上します。または、col_null_patt='[[:space:]]*'必要な数の空白(空白を含む)と一致させます。

関連情報