只需使用POSIX
兼容的split()
功能于$2
as
awk '{split($2,temp,":"); $2=temp[2];}1' file
--- 16050075 16050075 A G
--- 16050115 16050115 G A
--- 16050213 16050213 C T
--- 16050319 16050319 C T
--- 16050527 16050527 C A
在分隔符上拆分第 2 列:
,更新$2
所需元素的值(temp[2]
)并打印其余字段({}1
基于重建所有单独的字段FS
并打印出来)。
推荐使用多个分隔符,因为它会改变各个字段的绝对位置,而split()
可以轻松保留位置并提取所需的值。
对于添加新列的更新要求,只需执行
awk '{split($2,temp,":"); $2=temp[1] FS temp[2];}1' file
--- 22 16050075 16050075 A G
--- 22 16050115 16050115 G A
--- 22 16050213 16050213 C T
--- 22 16050319 16050319 C T
--- 22 16050527 16050527 C A
或者如果你有GNU awk
/gawk
你可以使用它的gensub()
对于正则表达式(使用POSIX
字符类[[:digit]]
) 基于提取为
awk '{$2=gensub(/^([[:digit:]]+):([[:digit:]]+).*$/,"\\1 \\2","g",$2);}1' file
--- 22 16050075 16050075 A G
--- 22 16050115 16050115 G A
--- 22 16050213 16050213 C T
--- 22 16050319 16050319 C T
--- 22 16050527 16050527 C A
The gensub(/^([[:digit:]]+):([[:digit:]]+).*$/,"\\1 \\2","g",$2)
部分仅捕获由以下分隔的前两个字段:
与捕获组\\1
and \\2
并按原样打印其余字段。