행이 누락된 경우 행을 추가하세요.

행이 누락된 경우 행을 추가하세요.

매초마다 기록하는 데이터 수집 장치가 있습니다. 때로는 1초 이상 무작위로 떨어지는 경우도 있습니다. 예를 들어

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

단일 세션에서 1백만 개의 데이터 포인트를 수집할 수 있지만 100개 이상의 데이터 포인트가 누락될 수 있습니다.

주위를 둘러보면서 이 AWK 명령을 찾았습니다.

awk '{ while (NR + shift < $1) { print (NR + shift) " NA"; shift++ }; print } END { shift++; while (NR + shift < 13) { print (NR + shift) " NA"; shift++ } }' /tmp/test1

~에서이 답변

그러나 필요하지 않은 경우 새 줄을 제공합니다.

166 NA
167 NA
168 NA
169 NA
170 NA

내가 뭘 잘못했나요?

답변1

명령줄에 몇 가지 문제가 있습니다.

  1. CSV에서는 쉼표 구분 기호를 사용하지만 awk명령에서는 기본 공백 구분 기호를 사용합니다. 이것이 불필요한 패딩을 얻는 주된 이유입니다.
  2. 명령의 대소문자는 END최종 결과를 최소 12줄로 채우는 데에만 사용됩니다. 따라서 이를 제거하거나 테스트를 더 높은 최소값(아마도 사용자 지정)으로 변경해야 합니다.
  3. 대부분의 CSV 처리 도구는 필드 수가 다른 행을 좋아하지 않습니다. 따라서 패딩 행에는 일반 행과 동일한 수의 필드가 포함되어야 합니다.

요약하자면, 첫 번째 레코드가 Second 로 시작한다고 가정하면 1다음과 같습니다.

awk -F, -v min_secs=2000 '
{ 
  while (NR + shift < $1) {
    print (NR + shift) ",NA,NA,NA,NA"
    shift++ 
  }
  print
}
END {
  while (NR + shift <= min_secs) {
    print (NR + shift) ",NA,NA,NA,NA"
    shift++ 
  }
}
' /tmp/test1

관련 정보