如果缺少一行,请添加一行

如果缺少一行,请添加一行

我有一个每秒记录一次的数据收集设备。有时,它会随机下降一秒或更长时间。例如

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

您的命令行存在一些问题:

  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

相关内容