1

私は一度質問があります。「=」をフィールドセパレーターとして使用しているとします。この場合、私の文字列にたとえば

abc=def\=jkl 

= をフィールドセパレータとして使用すると、次のように 3 つに分割されます。

abc def\ jkl 

しかし、2番目の "=" をエスケープしたので、出力は次のようになります

abc def\=jkl

私がこれを達成できるなら、誰でも私に何か提案をしてください。前もって感謝します

4

2 に答える 2

1

あなたの質問の例のようであれば、それを行うことができます。

awk はルックアラウンド正規表現をサポートしていません。そのため、 を設定して必要なものを取得するのは少し難しいでしょうFS

もし私があなたなら、データを awk で扱いやすくするために前処理を行います。または、行を読んで、awk で他の関数を使用することもできます。たとえば、結果に含めたくない sgensub()を削除します...しかし、 を再生して目標を達成したいと思うので、私はそうしませんそれらの解決策を教えてください。=splitfield 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
于 2013-04-04T15:49:03.093 に答える