使用awk替换两列中的值

使用awk替换两列中的值,awk,Awk,嗨,我有一个像这样的文本文件 P383 0 II-5 2 0 1/2 0 0 42.7 0 54.67 0 T528 0 P383 2 0 1/2 0 0 0 0 34.06 0 T529 III-8 0 2 0 0 0

嗨,我有一个像这样的文本文件

P383      0         II-5    2     0     1/2   0       0       42.7    0       54.67   0      
T528      0         P383    2     0     1/2   0       0       0       0       34.06   0      
T529      III-8     0       2     0     0     0       0       0       0       37.74   0      
T530      III-8     0       2     0     0     0       0       0       0       36.73   0      
3B888     III-4     III-5   2     0     1/2   38.4    0       0       0       44.38   0      
我想将第2、3和5列中的0替换为“”(空白),我知道如何为一列执行此操作

期望的输出是

P383                II-5    2           1/2   0       0       42.7    0       54.67   0      
T528                P383    2           1/2   0       0       0       0       34.06   0      
T529      III-8             2           0     0       0       0       0       37.74   0      
T530      III-8             2           0     0       0       0       0       36.73   0      
3B888     III-4     III-5   2           1/2   38.4    0       0       0       44.38   0      
我知道如何为一个专栏做这件事

 awk '$3=="0"{$3=" "}; {print}' file
但是我如何同时为三个专栏做这件事呢


感谢以下
awk
可能会对您有所帮助

awk '{$2=$2==0?"":$2;$3=$3==0?"":$3;$5=$5==0?"":$5;} 1' OFS="\t"  Input_file
解决方案2:添加一个更通用的解决方案,通过该解决方案,您可以按如下方式传递函数中的字段数

awk '
function check_fields(a){
  num=split(a,array,",");
  for(i=1;i<=num;i++){
    $array[i]=$array[i]==0?"":$array[i]}
}
check_fields("2,3,5")
1
' OFS="\t"   Input_file
awk'
功能检查_字段(a){
num=拆分(a,数组,“,”);

对于(i=1;ithanks@jnevil,但此命令
awk'$2==“0”;$3==“0”;$5==“0”{$2=”“;$3=“”;$5=”“;print}”文件
未生成所需的输出,请详细说明答案?
awk '
    BEGIN { split("2 3 5", tmp); for (i in tmp) flds[tmp[i]] }
    { for (i in flds) if ($i == 0) $i = ""; print }
' file