使用gsub和awk从特定列中删除点(.)

jam*_*mie 8 unix awk gsub

我想仅从表格的第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    
Run Code Online (Sandbox Code Playgroud)

所以我尝试了以下命令.

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

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

1    10057   .          
1    10146   .            
1    10177   .        
1    10230   .       
1    10349   .                 
1    10389   .       
Run Code Online (Sandbox Code Playgroud)

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

Ed *_*ton 10

当您使用字符串来保存RE(例如"\.")时,字符串被解析两次 - 一次是在awk读取脚本时,然后在由awk执行时再次解析.结果是你需要两次逃避RE元字符(例如"\\.").

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

awk 'BEGIN {OFS=FS="\t"} {gsub(/\./,"",$4);gsub(/\./,"",$5)}1' input
Run Code Online (Sandbox Code Playgroud)