2つのパターンの間に置いたコンマに対して、awkが「構文エラー」を表示するのはなぜですか?

2つのパターンの間に置いたコンマに対して、awkが「構文エラー」を表示するのはなぜですか?

デフォルトでは、GNU Awk 4.0.1がインストールされているLinux(USBキーのMint)で次のスクリプトを実行しました。

awkが返したエラーは次のとおりです。

awk: cmd. line:7:               /^Observation/,/^@@@/ {sub("/^N° of case: \\(.*\\)$","\\1\\$"); print}
awk: cmd. line:7:                             ^ syntax error

スクリプトは次のとおりです(ここから削除した関連のないコード行を「...」に置き換えます)。

#!/bin/bash

...

awk 'BEGIN \
    {
        FS = "@@@\n"; RS = "###-###\n"; OFS = "$"; ORS = "\n"; SUBSEP = ","
        printf("CaseNum$Department$Topic\n");
    }
    {
        # Body awk script
        /^Observation/,/^@@@/ {sub("/^N° of case: \\(.*\\)$","\\1\\$"); print}
        /^Observation/,/^@@@/ {sub("/^Department: \\(.*\\)$","\\1\\$"); print}
        /^Observation/,/^@@@/ {sub("/^Topic: \\(.*\\)$","\\1\\$"); print}
    }
    END \
    {
        #printf("Number of records processed : %d",NR);
    }' input.txt > out.csv

ちなみに、スクリプトによって解析されたinput.txtファイルは次のとおりです(ここで「Blabla」は何でも構いませんが、長さも制限されません)。

...
Observation
Blabla
N° of case: ZX56734562
Blabla
Department: 56
Blabla
Topic: ER
Blabla
@@@
Blabla
@@@
Blabla
###-###
Observation
Blabla
N° of case: RF34678432
Blabla
Topic: TYG
Blabla
@@@
Blabla
...

一部のフィールドが欠落している可能性がありますが、out.csvファイルは省略されたフィールドを含むすべてのフィールドを保持する必要があります。

次のout.csv(csv形式、最初の行のヘッダー)を取得したいと思います。

CaseNum$Department$Topic
ZX56734562$56$ER
RF34678432$$TYG

sedの使い方を知っていますが、awkを使いたいです。また、私のコードの構造(1つの圧縮コードの代わりに数行、BEGINおよびENDブロック、「Blabla」で誤ったフィールドを見つけるのを防ぐための2つのパターンフィルタ)を維持したいと思います。

よろしくお願いします。

ベストアンサー1

awk 'BEGIN {
        ...
     }
     # the next line should NOT be within curly braces
     $1 ~ /^Observation/, $1 ~ /^@@@/ { ... }
     {
        ...
     }
     END{
        ...
     }' input.txt > out.csv

おすすめ記事