最初の列には、次の項目を含むタブ区切りファイルがあります。
sp|O00253|AGRP_HUMAN
awk
列1のsの間のテキスト|
と、残りの列の残りのテキストだけが変更されていない新しいファイルを出力するために使用しようとしています。
正規表現
/\w{2}\|(\w+)\|\w+/
O00253
キャプチャグループで目的のtext()と一致しますが、使用$1
できません。awk
gensub
以下の行の周りで何度も繰り返しようとしましたが、すべてが変更されていないキャプチャグループを返します。
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