заменить значения в двух столбцах с помощью awk - PullRequest
0 голосов
/ 14 мая 2018

Привет, у меня есть текстовый файл, который выглядит так

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      

Я хочу заменить 0 в столбцах 2, 3 и 5 на "" (пробел), я знаю, как это сделать для одного столбца

Желаемый результат будет

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 голосов
/ 14 мая 2018
awk '
    BEGIN { split("2 3 5", tmp); for (i in tmp) flds[tmp[i]] }
    { for (i in flds) if ($i == 0) $i = ""; print }
' file
0 голосов
/ 14 мая 2018

После 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...