8

我只想从表格的第 4 列和第 5 列中删除点(。)。

input
1    10057   .       A       AC      
1    10146   .       AC.      A       
1    10177   .       A       AC      
1    10230   .       AC      .A,AN    
1    10349   .       CCCTA   C,CCCTAA.              
1    10389   .       .AC      A,AN



desired output
1    10057   .       A       AC      
1    10146   .       AC      A       
1    10177   .       A       AC      
1    10230   .       AC      A,AN    
1    10349   .       CCCTA   C,CCCTAA              
1    10389   .       AC      A,AN    

所以我尝试了以下命令。

awk 'BEGIN {OFS=FS="\t"} {gsub("\.","",$4);gsub("\.","",$5)}1' input

我得到了这个结果(整个第 4 列和第 5 列都被删除了)。

1    10057   .          
1    10146   .            
1    10177   .        
1    10230   .       
1    10349   .                 
1    10389   .       

你能指出我需要修改的地方吗?提前致谢。

4

1 回答 1

14

当您使用字符串来保存 RE(例如"\.")时,字符串会被解析两次 - 一次是在 awk 读取脚本时,一次是在 awk 执行时。结果是您需要两次转义 RE 元字符(例如"\\.")。

在各个方面更好的解决方案不是将 RE 指定为字符串,而是将其指定为 RE 常量,而不是使用适当的分隔符,例如/\./

awk 'BEGIN {OFS=FS="\t"} {gsub(/\./,"",$4);gsub(/\./,"",$5)}1' input
于 2013-09-26T19:22:27.910 回答