gensubを使用しても一致は置き換えられません。

gensubを使用しても一致は置き換えられません。

最初の列には、次の項目を含むタブ区切りファイルがあります。

sp|O00253|AGRP_HUMAN

awk列1のsの間のテキスト|と、残りの列の残りのテキストだけが変更されていない新しいファイルを出力するために使用しようとしています。

正規表現

/\w{2}\|(\w+)\|\w+/

O00253キャプチャグループで目的のtext()と一致しますが、使用$1できません。awkgensub

以下の行の周りで何度も繰り返しようとしましたが、すべてが変更されていないキャプチャグループを返します。

awk 'gensub(/\w{2}\|(\w+)\|\w+/,"\\1","g",$1) {print}'

awk '{print gensub(/\w{2}\|(\w+)\|\w+/,"\\1","g",$0)}'

私は何を見逃していますか?

ベストアンサー1

2番目の解決策はここでうまく機能します。最初の理由は次のとおりです。gensub

関数の結果として変更された文字列を返します。 元のターゲット文字列は変更されません。1

結果を変数に割り当ててから更新できます$1

awk '{x=gensub(/\w{2}\|(\w+)\|\w+/,"\\1","1",$1);$1=x};1' infile

私はこれを行いますが:

awk '{split($1,arr,"|");$1=arr[2]};1' infile

おすすめ記事