簡體   English   中英

使用帶/ 1的awk gsub可以用一部分原始字符替換字符

[英]Using awk gsub with /1 to replace chars with a section of the original characters

這就是我正在做的(我只想擺脫第四列中的前導數字)

cat text.txt | awk 'BEGIN {OFS="\t"} {gsub(/[0-9XY][0-9]?([pq])/,"\1",$4); print}'

這是我的意見

AADDC   4902    3   21q11.3-p11.1   4784    4793
DEEDA   4023    6   9p21.31|22.3-p22.1  2829    2832
ZWTEF   3920    10  8q21-q22    5811    5812

這是我的輸出

AADDC   4902    3   11.3-p11.1  4784    4793
DEEDA   4023    6   21.31|22.3-p22.1    2829    2832
ZWTEF   3920    10  21-q22  5811    5812

但是我希望這是我的輸出

AADDC   4902    3   q11.3-p11.1 4784    4793
DEEDA   4023    6   p21.31|22.3-p22.1   2829    2832
ZWTEF   3920    10  q21-q22 5811    5812

如果使用GNU awk ,則可以使用gensub ,它與gsub不同,它支持反向引用:

awk 'BEGIN {OFS="\t"} {$4=gensub(/[0-9XY][0-9]?([pq])/,"\\1",1,$4); print}' text.txt

一些解釋:

1:多余的“ \\”是什么?

因為否則,這將是ASCII代碼1的字符。

為什么需要在\\ 1“和$ 4之間放置1:

告訴gensub僅替換模式的第一次出現。

是否有理由必須同時放置$ 4 =和$ 4

是的,與gsub不同, gensub不會修改該字段,但會返回更新的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM