我想从特定点删除字符,直到第一个空格之前(不删除空白本身)。例如,我的file.txt如下: -
>DN256845_c2_g1_i1 len=56274 ACGGAGG
>DN256532_c0_g2_i19 len=23973 AATACTC
>DN256979_c8_g3_i32 len=16728 CGAAACT
'X'是数字,例如1或19或32,我希望它是: -
>DN256845_c2_g1 len=56274 ACGGAGG
>DN256532_c0_g2 len=23973 AATACTC
>DN256979_c8_g3 len=16728 CGAAACT
我使用了sed 's/_i.*//'
,但它删除了_i
之后的所有内容。我尝试过的其他代码是sed 's/_i.*\./\ /g'
,
sed -E 's/_i.*+[^[: :]]//g'
最终没有任何改变。
如何使用sed / awk或任何其他方法解决此问题?我很感激帮助。谢谢!
编辑:正如Sundeep所建议的,我编辑了这些问题以便于理解。这些数据实际上是Trinity成绩单标识符。我需要删除标识符(_i1等)以进行某些分析。)答案 0 :(得分:2)
在awk中:
$ awk '{sub(/_[^_ ]+ /," ")}1' file
>DN256845_c2_gXX len=56274 ACGGAGG
>DN256532_c0_gXX len=23973 AATACTC
>DN256979_c8_gXX len=16728 CGAAACT
与sed
相同:
$ sed 's/_[^_ ]\+ / /' file
替换下划线的第一个实例,除了下划线或空格以外的所有内容以及带空格的空格。
编辑:我想知道为什么我没有发布这个明显的awk来操纵$ 1的结尾:
$ awk '{sub(/_[^_]+$/,"",$1)}1' file
答案 1 :(得分:1)
' X'是数字,如1或19或32
最好尽可能地将样本提供给实际用例。我已经更改了样本数据,以便在X
之后将i
更改为数字..如果这没有帮助,请添加更好的示例问题
$ cat ip.txt
>DN256845_c2_gXX_i1 len=56274 ACGGAGG
>DN256532_c0_gXX_i19 len=23973 AATACTC
>DN256979_c8_gXX_i32 len=16728 CGAAACT
$ sed 's/_i[0-9]* / /' ip.txt
>DN256845_c2_gXX len=56274 ACGGAGG
>DN256532_c0_gXX len=23973 AATACTC
>DN256979_c8_gXX len=16728 CGAAACT
_i[0-9]*
匹配_
后跟零个或多个数字后跟空格对于这个用例,这也可以缩短为
sed 's/_i[^ ]*//' ip.txt