다음과 같은 형태의 원시 데이터 행 50개가 있습니다.
09-06-16 16:45:00 1100000000
09-06-16 17:00:00 1200000000
09-06-16 17:15:00 1300000000
09-06-16 17:30:00 1400000000
09-06- 16 17 :45:00 1500000000
명령을 사용하거나 시퀀스 끝에 새 줄을 추가하는 스크립트를 만들고 싶습니다. 데이터의 단일 행은 시간을 15분 간격으로 진행해야 하며 숫자도 100000000씩 늘리기를 원합니다. 하지만 데이터 생성을 시뮬레이션하기 위해 crontab 스크립트를 작성할 계획입니다. 따라서 날짜는 상황에 따라 변경될 수 있습니다. 값이 1500000000이면 1100000000으로 돌아가기를 원합니다.
나는 항상 50개의 데이터 포인트가 있도록 데이터의 첫 번째 행(내 수준에서는 더 많음)을 삭제하는 스크립트를 작성했습니다.
어떤 도움이라도 대단히 감사하겠습니다.
답변1
나는 perl
이것을 사용하여 모든 것을 완료합니다.
perl -MTime::Piece -i -lne '
print unless $. == 1; # remove first line
if (eof) {
($t, $n) = /(.*) (.*)/;
$t = Time::Piece->strptime($t, "%y-%m-%d %T") + 60*15;
$n += 1e8; $n = 11e8 if $n > 15e8;
print $t->strftime("%y-%m-%d %T $n")
}' your-file
Time::Piece
5.10에 추가되었습니다. 이전 버전의 경우 언제든지 다음을 사용할 수 있습니다 POSIX::mktime
.
perl -MPOSIX -i -lne '
print unless $. == 1; # remove first line
if (eof) {
($y, $mo, $d, $h, $mi, $s , $n) = /(..)-(..)-(..) (..):(..):(..) (.*)/;
$t = mktime($s, $mi, $h, $d, $mo-1, $y+100) + 60*15;
$n += 1e8; $n = 11e8 if $n > 15e8;
print strftime("%y-%m-%d %T $n", localtime $t)
}'