我需要更改 CSV 文件中的日期

我需要更改 CSV 文件中的日期

我有如下示例数据文件(csv),需要从示例文件生成大量数据。为此,我需要更改时间戳中的日期(DD)并运行 for 循环以生成更多数据。

14/03/2017 00:05:58,General2,General3,General4,General5,General6,General7

答案1

这是 bash 中的一种可能性(在 Ubuntu 16.04.3 LTS 上尝试过)

将您的 csv 放入名为 yourfile.csv 的文件中(或更改此代码),然后运行以下命令:

#!/bin/bash
DATE=$1
for i in `seq 1 30`; do
        NEWDATE=`date -d"${DATE}+${i}day" +'%d/%m/%Y'`
        while read line; do
                echo $line | sed -u -r "s#^.{10}#${NEWDATE}#"
        done <yourfile.csv
done

它将为每个输入行生成+30 天,因此您只需要包含 1 行的文件。哦,它接受日期作为参数,并将生成从该日期开始的 30 天以上的数据。

更新缓慢:试试这个,也许它对你来说更快:

#!/bin/bash
DATE=$1
let i=0
while read line; do
        let i=(i++ % 30)
        NEWDATE=`date -d"${DATE}+${i}day" +'%d/%m/%Y'`
        echo $line | sed -u -r "s#^.{10}#${NEWDATE}#"
done <yourfile.csv

1M 行将生成 1M 行,而不是 1M 生成 30M。

答案2

要简单地将日期中的天数更改为某个固定值(例如 15),您可以这样做

sed 's/[0-9]*/15/' your.csv

如果您想在该文件中更改它,请添加该-i选项(如果您sed支持)。

如果您想在多个月的所有日子里自动执行此操作,最好使用其他工具,例如pythonperl

更新: 或者找点sed乐子:

sed -n 'p;x;s/^/0123456789_/;H;g
  :a
  s#\(.\)\(/.*\1\)\(.\)#\3\2\3#
  s/^0_/10/;s/^1_/20/;s/^2_/30/
  /^31.0[46]/s/1/2/;s#^32/0\(.\)\(.*\1\)\(.\)#01/0\3\2\3#
  P;\#^01/08#!ba' sample.csv

这会将每一行与从给定的日期开始到 的每一天14/03相乘01/08。抱歉喝太多了。

相关内容