我有一个制表符分隔的文件,第一列包含如下条目:
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