我有一个每秒记录一次的数据收集设备。有时,它会随机下降一秒或更长时间。例如
166,1.09424,240,76,132
168,1.10088,215,76,132
169,1.10765,213,78,131
170,1.11458,198,79,131
它可以在一次会话中收集 100 万个数据点,但可能会错过 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