awk で \n( と )\n を区切り文字として使用する方法

awk で \n( と )\n を区切り文字として使用する方法

以下のデータを含むファイルがあります

7[label = "ScanStep: T_b0\n(T.a = 1)\na\nb\nc\nd\ne\ndob\ntimestamp1\nUnc: Integer(8)\nUnc: Integer(8)\nUnc: Varchar(80)\nUnc: Numeric(10,2)\nUnc: Varbinary(80)\nUnc: Date(8)\nUnc: Timestamp(8)", color = "brown", shape = "box"];

7[label = "ScanStep: cde_b1\nBuddies: (cde_b1, cde_b0, cde_b2)\n(public.cde.newcol = \'013\')\nssn\nnewcol\nmasked_ssn\nUnc: Numeric(10,2)\nUnc: Varbinary(80)\nUnc: Date(8)\nUnc: Timestamp(8)", color = "brown", shape = "box"];

このようなエントリは複数あります。

「\n(」の後と「)\n」の前にあるエントリのみを印刷する必要があります。

awk で試してみましたが、区切り文字を指定できませんでした。

awk -F "\\n\\\\(" '{print $1}' unset

ファイルの全行を印刷します

awk -F "\\n\\(" '{print $1}' unset

awk: 警告: エスケープシーケンス\(' treated as plain(' awk: 致命的: 一致しない ( または (: / (/

答え1

これは次のようにして実現できますsed:

sed -e 's,\\n(.*,,' unset

あるいは、awk逃げることをたくさんしなければならない

awk -F'\\\\n\\(' '{print $1}' unset

\の前の両方の正しいエスケープを取得しn、の特別な解釈から保護する(

答え2

grep と sed を組み合わせて使用​​して、\n( および )\n の後の目標を達成しました。

grep -o '\\n(.*)\\n' test.txt|sed -e 's/\\n//g'

サンプル出力

(T.a = 1)
(public.cde.newcol = \'013\')

関連情報