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. 술을 너무 많이 마셔서 죄송합니다.

관련 정보