Я пытаюсь обновить файл csv в сценарии оболочки, чтобы обновить конкретное поле на основе некоторого условия
- Сценарий будет читать csv построчно. он встречает "N" в f6, он начинает вычислять новую дату для f3, а затем заменяет старое значение новым значением.
- Все внутри скрипта в порядке и работает согласно ожиданиям, но когда CSV получает обновлен, он не получает правильную дату в f3.
- Он обновляется с некоторыми случайными значениями, хотя он вычисляется правильно.
Код
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-я строки содержат неправильные значения, в журналах они вычисляются правильно, но не обновляют лист должным образом.