lga*_*her 2 regex sed bioinformatics samtools
我有一个带有RX:的SAM文件:字段包含12个碱基,中间用-ie 隔开RX:Z:CTGTGC-TCGTAA
我想从此字段中删除连字符,但是我不能简单地从整个文件中删除所有连字符,因为读取的名称包含它们,例如 1713704_EP0004-T
大多数情况下都在尝试,tr,但这只是从文件中删除所有连字符。
tr -d '"-' < sample.fq.unaln.umi.sam > sample.fq.unaln.umi.re.sam
Run Code Online (Sandbox Code Playgroud)
输入是一个大于10,000,000行的大型SAM文件,如下所示:
1902336-103-016_C1D1_1E-T:34 99 chr1 131341 36 146M = 131376 182 GGACAGGGAGTGTTGACCCTGGGCGGCCCCCTGGAGCCACCTGCCCTGAAAGCCCAGGGCCCGCAACCCCACACACTTTGGGGCTGGTGGAACCTGGTAAAAGCTCACCTCCCACCATGGAGGAGGAGCCCTGGGCCCCTCAGGGG NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN MC:Z:147M MD:Z:83T62cD:i:4 cE:f:0 PG:Z:bwa RG:Z:A MI:Z:34 NM:i:1 cM:i:3 MQ:i:36 UQ:i:45 AS:i:141 XS:i:136 RX:Z:CTGTGC-TCGTAA
Run Code Online (Sandbox Code Playgroud)
所需的输出(即最后一个字段)
1902336-103-016_C1D1_1E-T:34 99 chr1 131341 36 146M = 131376 182 GGACAGGGAGTGTTGACCCTGGGCGGCCCCCTGGAGCCACCTGCCCTGAAAGCCCAGGGCCCGCAACCCCACACACTTTGGGGCTGGTGGAACCTGGTAAAAGCTCACCTCCCACCATGGAGGAGGAGCCCTGGGCCCCTCAGGGG NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN MC:Z:147M MD:Z:83T62cD:i:4 cE:f:0 PG:Z:bwa RG:Z:A MI:Z:34 NM:i:1 cM:i:3 MQ:i:36 UQ:i:45 AS:i:141 XS:i:136 RX:Z:CTGTGCTCGTAA
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
awk
awk '{sub(/-/,"",$NF)}1' file
Run Code Online (Sandbox Code Playgroud)
是您所需要的。
说明
sub(/-/,"",$NF)用-空字符串替换最后一个字段中的,使更改保持不变。GNU sed
对于这个同样的原因,
sed -Ei 's/^(.*)-/\1/' file
Run Code Online (Sandbox Code Playgroud)
将工作。它具有可以执行就地编辑的附加优点。
说明
-E选项启用扩展的正则表达式引擎。(.*)是一个贪婪的搜索,它将与任意字符(.)匹配任意次(*)。对于贪婪的事实,它将匹配最后一个连字符。()品牌sed还记得发生了什么匹配。\1(1因为我们只有一对括号,请注意,您可以根据需要设置任意数量)而没有连字符,从而有效地将其从应该出现的最后一个字段中删除。注:该GNU awk支持-i inplace,但我不知道从哪个版本。