매초마다 기록하는 데이터 수집 장치가 있습니다. 때로는 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
명령줄에 몇 가지 문제가 있습니다.
- CSV에서는 쉼표 구분 기호를 사용하지만
awk
명령에서는 기본 공백 구분 기호를 사용합니다. 이것이 불필요한 패딩을 얻는 주된 이유입니다. - 명령의 대소문자는
END
최종 결과를 최소 12줄로 채우는 데에만 사용됩니다. 따라서 이를 제거하거나 테스트를 더 높은 최소값(아마도 사용자 지정)으로 변경해야 합니다. - 대부분의 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