以下のサンプルデータファイル(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
。飲みすぎてすみません。