[英]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.