特定の単語で始まる行を印刷し、残りのレコードには最初のフィールドだけを印刷したいと思います。

特定の単語で始まる行を印刷し、残りのレコードには最初のフィールドだけを印刷したいと思います。

たとえば、

CREATE TABLE MWWDATA."VTCat02" (
    "ID" NUMBER(10) DEFAULT NULL ,
    "Cat" VARCHAR2(255) DEFAULT NULL ,
    "Style_Code" VARCHAR2(255) DEFAULT NULL ,
    "Vendor_Style_#" VARCHAR2(255) DEFAULT NULL );

上記の例では、CREATE TABLEで始まる行を印刷し、残りの行では最初のフィールドのみを印刷しようとしています。

私はこの出力が欲しい

CREATE TABLE MWWDATA."VTCat02" ("ID","Cat","Style_code","Vendor_Style_#");

ベストアンサー1

そしてawk

awk '/^CREATE TABLE/{
       inside = 1
       sep = ""
       printf "%s", $0
       next
     }
     inside {
       printf "%s", sep $1
       sep = ","
       if (/\);$/) {
         print ");"
         inside = 0
       }
     }'

CREATE TABLEこれは行の先頭から始まり、);行の終わりで終わるステートメント(同じ行ではありません)に依存します。各列名は後続の行の最初のフィールドです(つまり、列名にスペースを含めることはできません)。 。

おすすめ記事