移除制表符分隔文件中的单独点号但保留小数
移除制表符分隔数据中单独的点号(保留小数点)
你有如下制表符分隔的数据:
#chr pos ref alt af_alt filter an 22 10510033 T C . AC0;AS_VQSR 0 22 10510061 A T 0 AC0 2 (non-dot lines snipped) 22 10510286 G A 0 AC0;AS_VQSR 1598 22 10510286 G T 0.00125156 AS_VQSR 1598
需求是移除每一列里单独的点号(比如af_alt列的.),但保留小数中的点(比如最后一行的0.00125156)。
你之前尝试的命令:
awk 'BEGIN {OFS=FS=" "} {gsub(/^\.$/,"",$1)}1'
这个命令没生效的原因有两个:
- 只针对第1列(
$1)做处理,而需要清理的点号在其他列(比如示例里的第5列) - 用四个空格作为分隔符,但实际数据是制表符分隔,空格数可能不一致导致列识别错误
正确的解决命令
用下面的AWK命令可以实现需求:
awk 'BEGIN {FS=OFS="\t"} {for(i=1;i<=NF;i++) if($i == ".") $i=""}1'
命令说明:
BEGIN {FS=OFS="\t"}:指定输入和输出的分隔符都是制表符,保证列处理精准for(i=1;i<=NF;i++):遍历每一行的所有列if($i == ".") $i="":判断当前列是否是单独的点号,是的话就置为空字符串1:AWK里的简写,代表打印处理后的整行
处理后的效果示例
#chr pos ref alt af_alt filter an 22 10510033 T C AC0;AS_VQSR 0 22 10510061 A T 0 AC0 2 (non-dot lines snipped) 22 10510286 G A 0 AC0;AS_VQSR 1598 22 10510286 G T 0.00125156 AS_VQSR 1598
可以看到单独的点号已经被移除,小数里的点完全保留。
内容的提问来源于stack exchange,提问作者curious
相关产品推荐
相关产品推荐

