데이터 계열에 행이 누락된 경우 행 추가

데이터 계열에 행이 누락된 경우 행 추가

초당 5개의 데이터 속성을 기록하는 데이터 수집 장치가 있습니다. 데이터의 첫 번째 열은 경과 시간(초)이며 항상 연속적입니다(예: n+1). 데이터 필드는 쉼표로 구분됩니다.

무작위로 장치가 샘플을 기록하지 않으므로 파일에서 1초를 건너뛰고 때로는 그 이상을 건너뜁니다. 예를 들어 아래 샘플 번호 167이 누락되었습니다.

166,1.09424,240,76,132
168,1.10088,215,76,132
169,1.10765,213,78,131
170,1.11458,198,79,131

그리고 여기서는 294와 295가 누락되었습니다.

292,2.04078,285,66,108
293,2.04673,302,64,108
296,2.06309,306,67,109
297,2.06859,370,66,109

수집된 데이터에는 세션당 최대 100만 개의 데이터 포인트까지 원하는 수의 행/샘플이 포함됩니다. 드롭된 샘플의 수는 200개를 초과할 수 있으며, 전체에 무작위로 흩어져 있습니다.

파일을 통해 실행될 스크립트나 명령을 찾고 있는데 줄이 누락된 경우 새 줄을 추가하고 아래와 같이 타임스탬프/샘플 번호를 추가합니다.

166,1.09424,240,76,132
167
168,1.10088,215,76,132
169,1.10765,213,78,131
170,1.11458,198,79,131

아니면 이거

292,2.04078,285,66,108
293,2.04673,302,64,108
294
295
296,2.06309,306,67,109
297,2.06859,370,66,109

내가 찾은이 답변이것은 부분적인 대답이지만 많은 잘못된 새 줄을 제공합니다. 질문에 이런 질문을 했는데요덜 정확한 형태더 나은 답변을 얻었지만 여전히 해결책을 얻지 못했습니다.

OSX 10.14.2에서 실행되는 명령을 사용하는 BASH 스크립팅을 선호합니다. 미리 감사드립니다.

답변1

이것은 당신에게 재치 있는 말일 수도 있습니다

awk -F, 'n==""||n>$1{n=$1}{while(n!=$1){print n++}}{print;n++}' < input > output

이전 상황과 크게 다르지는 않지만, 숫자 계열이 갑자기 낮은 숫자로 바뀌는 경우의 "보호"를 제외하면 말이죠.

관련 정보