行が見つからない場合は、行を追加してください。

行が見つからない場合は、行を追加してください。

毎秒記録するデータ収集装置があります。時には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

単一セッションで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

おすすめ記事