Обновить определенное поле на основе некоторого условия в файле CSV - PullRequest
1 голос
/ 14 июля 2020

Я пытаюсь обновить файл csv в сценарии оболочки, чтобы обновить конкретное поле на основе некоторого условия

  1. Сценарий будет читать csv построчно. он встречает "N" в f6, он начинает вычислять новую дату для f3, а затем заменяет старое значение новым значением.
  2. Все внутри скрипта в порядке и работает согласно ожиданиям, но когда CSV получает обновлен, он не получает правильную дату в f3.
  3. Он обновляется с некоторыми случайными значениями, хотя он вычисляется правильно.

Код

    while IFS= read -r line;
        do
        echo $line
        Flag=`echo $line|cut -d, -f6`
        if [ $Flag == 'N' ]
         then
         freq=`echo $line|cut -d, -f4`        
        old_dt=`echo $line|cut -d, -f3`
        new_dt=`date -d "$yest_dt +$freq days" '+%Y-%m-%d'`
        echo $new_dt
        echo $old_dt
        sed -i "s/"$old_dt"/"$new_dt"/" $dir/abc.csv  
        sed -i "s/$Flag/"Y"/"  $dir/abc.csv    
        
           
        fi
        done < $dir/abc.csv  }

Log

    IFS=
    + read -r line
    + echo 123,server,2020-08-08,30,xyz@mail.com,N
    123,server,2020-08-08,30,xyz@mail.com,N
    ++ cut -d, -f6
    + Flag=N
     + '[' N == N ']'
    ++ cut -d, -f4
    + freq=30
    ++ cut -d, -f3
     + old_dt=2020-08-08
     ++ date -d '2020-07-13 +30 days' +%Y-%m-%d
     + new_dt=2020-08-12
     + echo 2020-08-12
     2020-08-12
     + echo 2020-08-08
     2020-08-08
     + sed -i s/2020-08-08/2020-08-12/ /dir/abc.csv
     + sed -i s/N/Y/ /dir/abc.csv

CSV вывод после запуска скрипта

123 server  2020-08-12  30  xyz@mail.com    Y
123 server  2020-10-11  90  xyz@mail.com    Y
123 server  2020-10-11  90  xyz@mail.com    Y
123 server  2020-09-11  60  xyz@mail.com    Y
123 server  2020-08-27  45  xyz@mail.com    Y
123 server  2020-10-11  30  xyz@mail.com    Y
123 server  2020-09-11  60  xyz@mail.com    Y
123 server  2020-08-27  30  xyz@mail.com    Y

первые 5 строк соответствуют ожиданиям, но 6-я и 8-я строки содержат неправильные значения, в журналах они вычисляются правильно, но не обновляют лист должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...