通过特定的定界符删除字符串

钟Chun

我的文件中没有几列,其中第二列带有“:”定界符,我想删除第二列中的第一,第三和第四字符串,并将第二字符串保留在该列中。但是我有正常的定界符空间,所以我不知道。

input:

--- 22:16050075:A:G 16050075 A G
--- 22:16050115:G:A 16050115 G A
--- 22:16050213:C:T 16050213 C T
--- 22:16050319:C:T 16050319 C T
--- 22:16050527:C:A 16050527 C A

desired output:

--- 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

Wrong:
cat df.txt | awk -F: '{print $1, $3, $6, $7, $8}'

--- 22 A
--- 22 G
--- 22 C
--- 22 C
--- 22 C

但我做不到。awk和sed命令可以做到吗?

谢谢。

伊尼安

只需使用POSIX兼容split()的功能,$2

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()用于基于正则表达式(使用POSIXcharacter class [[: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

gensub(/^([[:digit:]]+):([[:digit:]]+).*$/,"\\1 \\2","g",$2)部分仅捕获由:捕获组定界的前两个字段\\1\\2并照此打印其余字段。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

删除bash中由多字符定界符拆分的字符串的特定部分

JS / TS用定界符分割字符串而不删除定界符

删除定界符中的字符串部分

删除字符串中间的定界符

通过特定的定界符对字符串进行操作并写入文本文件

字符串模式定界符

拆分字符串保留一些定界符,但删除另一个定界符

我如何在bash中通过多个定界符来定界字符串

在定界符处拆分python字符串,但使用特定的字符串

通过定界符在pandas列中获取唯一字符串

删除字符串中定界符后的所有字符

字符串在R中的最后一个(也是第n个)定界符处分割,并删除定界符之前的字符串

按定界符分割字符串,并跳过定界符后跟某些字符的部分

使用多字符定界符分割字符串

拆分字符串而不删除python中的定界符

如果不满足条件,则删除定界符,并在条件上替换字符串

正则表达式-删除定界符之间的字符串

Python Pandas:删除字符串中定界符后的所有内容

在Swift中拆分字符串而不删除定界符

将字符串拆分为数组而不删除定界符?

使用sed删除定界符之间的字符串或段落

C#在定界符之前/之后删除字符串

Python字符串拆分模式,不删除定界符

删除字符串开头和结尾的所有定界符

将字符串拆分为数组而不删除定界符ruby

Visual Basic删除定界符后的剩余字符串

Java:使用正则表达式拆分字符串而不删除定界符

如何删除具有定界符的字符串中的重复值

使用sed删除定界符之间的字符串或段落