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ている場合は追加してください。

数ヶ月にわたって毎日このタスクを自動的に実行したい場合や、他のツールを使用することをお勧めpythonしますperl

修正する: それとも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。飲みすぎてすみません。

関連情報