使用 gensub 并不能取代匹配项

使用 gensub 并不能取代匹配项

我有一个制表符分隔的文件,第一列包含如下条目:

sp|O00253|AGRP_HUMAN

我试图用来awk输出一个新文件,该文件仅包含第 1 列中 s 之间的文本|以及其余列中未更改的其余文本。

正则表达式

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

O00253与捕获组中所需的文本 () 匹配$1,但我无法awk使用gensub.

我已经围绕下面的行尝试了多次迭代,但一切都只返回未更改的捕获组。

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

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

我缺少什么?

答案1

你的第二个解决方案在这里工作正常。你的第一个不是因为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

相关内容