2016-04-29 4 views
1

У меня есть файл в этом формате:Как удалить символы в определенных столбцах и разделить его с номером в Баш

2015;1;1;11;7;19805;"2";12892;12478;"0900";"0853";-7.00;17.00;"0910";"1712";11.00;"1723";-6.00;329.00;330.00;302.00;2475.00; 

и я хочу удалить кавычки в столбцах 10, 11, 14, 15 и 17 И затем разделите числа в этих столбцах на 2400. Поэтому вместо 900 я ожидаю 0,375 (= 900/2400).

Конечный результат должен быть в следующем формате:

2015;1;1;11;7;19805;"2";12892;12478;0.375;0.355;-7.00;17.00;0.379;0.713;11.00;0.718;-6.00;329.00;330.00;302.00;2475.00; 

Я думаю, что я знаю, как удалить кавычки, но я определенно потерял с остальными ... Или проще в питона и т.д.? Не могли бы вы мне помочь?

ответ

3

Вот гну AWK сценария для вашей ситуации:

rq.awk

BEGIN { FS=OFS=";" 
     OFMT="%.6g" # change output decimal format 
     # setup the field that should change: 
     split("10 11 14 15 17", ndx, " ") 
     } 

     { for(k in ndx) { 
      i=ndx[k] 
      gsub(/"/, "", $i) 
      $i=$i/2400 
     } 
     # print all fields 
     print 
     } 

Run это так: awk -f rq.awk your_file.

  • в начале поля передаются в массив ndx,
  • для каждой линии: она перебирает ndx и для каждого поля в NDX:
    • заменяет цитировались ничего с gsub функцией
    • делает Деление
  • одиночные print выходы всех F ields в том числе модифицированного полого
+1

совершенный ... :-). –

1

Другим способом взломать это с awk:

awk -F";" 'BEGIN{OFS=";"}function GSUB(F){gsub(/"/,"",$F);$F=$F/2400} {GSUB(10);GSUB(11);GSUB(14);GSUB(15);GSUB(1);print $0}' infile 

Это определяет функцию, которая заменяет ваши двойные кавычки для нуля, то делит на 2400. Тогда мы просто называем его для каждого поля и распечатать запись. В заявлении BEGIN устанавливается полевой сепаратор OFS на точку с запятой ;

 Смежные вопросы

  • Нет связанных вопросов^_^