毎秒記録するデータ収集装置があります。時には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
コマンドラインにいくつかの問題があります。
- 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