私は一度質問があります。「=」をフィールドセパレーターとして使用しているとします。この場合、私の文字列にたとえば
abc=def\=jkl
= をフィールドセパレータとして使用すると、次のように 3 つに分割されます。
abc def\ jkl
しかし、2番目の "=" をエスケープしたので、出力は次のようになります
abc def\=jkl
私がこれを達成できるなら、誰でも私に何か提案をしてください。前もって感謝します
あなたの質問の例のようであれば、それを行うことができます。
awk はルックアラウンド正規表現をサポートしていません。そのため、 を設定して必要なものを取得するのは少し難しいでしょうFS
。
もし私があなたなら、データを awk で扱いやすくするために前処理を行います。または、行を読んで、awk で他の関数を使用することもできます。たとえば、結果に含めたくない sgensub()
を削除します...しかし、 を再生して目標を達成したいと思うので、私はそうしませんそれらの解決策を教えてください。=
split
field separator
ただし、変数で実行できFPAT
ます。
awk -vFPAT='\\w*(\\\\=)?\\w*' '...' file
これはあなたの例でうまくいきます。実際のデータで機能するかどうかはわかりません。
この文字列を分割する例を作りましょう:"abc=def\=jkl=foo\=bar=baz"
kent$ echo "abc=def\=jkl=foo\=bar=baz"|awk -vFPAT='\\w*(\\\\=)?\\w*' '{for(i=1;i<=NF;i++)print $i}'
abc
def\=jkl
foo\=bar
baz
私はあなたがその結果を望んでいると思いますよね?
私のawkバージョン:
kent$ awk --version|head -1
GNU Awk 4.0.2