将NA字符串替换为连续日期linux的方法

问题描述 投票:0回答:1

这是我得到的CSV文件

2020-03-05,0,146541,118965,5766,88,35
2020-03-06,0,164740,136624,6284,108,42
MISSINGDATE,0,178189,151802,6767,118,44
2020-03-08,0,188518,162008,7134,130,50
2020-03-09,0,196618,171778,7382,166,51
MISSINGDATE,0,210144,184179,7513,247,54

我正在尝试将列中的“ MISSINGDATE”部分更改为相应的日期,从而导致前一行中的日期。

我能够使用sed命令指定“ MISSINGDATE”,但没有找到方法来更改它。

我做的时候

sed -i "s/[MISSINGDATE]/[date that I want]//g" file 

它只固定了我输入的日期不适用的日期...

我想要的结果是

2020-03-05,0,146541,118965,5766,88,35
2020-03-06,0,164740,136624,6284,108,42
2020-03-07,0,178189,151802,6767,118,44
2020-03-08,0,188518,162008,7134,130,50
2020-03-09,0,196618,171778,7382,166,51
2020-03-10,0,210144,184179,7513,247,54
unix sed grep edit
1个回答
0
投票

bash:

prev_date="1970-01-01"
while IFS=, read -ra fields; do
    if [[ ${fields[0]} == "MISSINGDATE" ]]; then
        fields[0]=$(date -d "$prev_date + 1 day" "+%F")
    fi
    (IFS=,; echo "${fields[*]}")
    prev_date=${fields[0]}
done < file.csv

假设GNU日期。

© www.soinside.com 2019 - 2024. All rights reserved.