使用awk替换两列中的值

时间:2018-05-14 16:27:48

标签: 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       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

但我如何同时为三列做这件事?

由于

2 个答案:

答案 0 :(得分:2)

关注awk可能对您有帮助。

awk '{$2=$2==0?"":$2;$3=$3==0?"":$3;$5=$5==0?"":$5;} 1' OFS="\t"  Input_file

解决方案第二: 添加更通用的解决方案,您可以通过该解决方案传递函数中的字段数。

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

答案 1 :(得分:0)

awk '
    BEGIN { split("2 3 5", tmp); for (i in tmp) flds[tmp[i]] }
    { for (i in flds) if ($i == 0) $i = ""; print }
' file