Удалить точку(.) из определенных столбцов с использованием gsub и awk

Я хочу удалить точку(.) только из 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(".","",);gsub(".","",)}1' input

и я получил этот результат (все 4-й и 5-й столбцы были удалены).

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

не могли бы вы указать, где я должен изменить? Спасибо заранее.

1 ответов


когда вы используете строку для удержания RE (например,"\.") строка анализируется дважды-один раз, когда скрипт читается awk, а затем снова при выполнении awk. В результате вам нужно дважды избежать метасимволов RE (например,"\.").

лучшее решение во всех отношениях-не указывать RE Как строку, а указывать ее как константу RE, используя соответствующие разделители, например /\./:

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