データ系列に行がない場合に行を追加する

データ系列に行がない場合に行を追加する

毎秒5つのデータ属性を記録するデータ収集装置があります。データの最初の列は経過時間(秒)で、常に連続的です(例:n + 1)。データフィールドはカンマで区切られます。

ランダムにデバイスがサンプルを記録しないため、ファイルから1秒をスキップし、時にはそれ以上をスキップします。たとえば、以下のサンプル番号167がありません。

166,1.09424,240,76,132
168,1.10088,215,76,132
169,1.10765,213,78,131
170,1.11458,198,79,131

そしてここでは294と295がありません。

292,2.04078,285,66,108
293,2.04673,302,64,108
296,2.06309,306,67,109
297,2.06859,370,66,109

収集されたデータには、セッションあたり最大100万のデータポイントまで、必要な数の行/サンプルが含まれます。ドロップされたサンプルの数は200を超える可能性があり、全体にランダムに散在しています。

ファイルを介して実行されるスクリプトまたはコマンドを探していて、行が見つからない場合は、新しい行を追加し、以下のようにタイムスタンプ/サンプル番号を追加します。

166,1.09424,240,76,132
167
168,1.10088,215,76,132
169,1.10765,213,78,131
170,1.11458,198,79,131

またはこれ

292,2.04078,285,66,108
293,2.04673,302,64,108
294
295
296,2.06309,306,67,109
297,2.06859,370,66,109

私が見つけたこの回答これは部分的な答えですが、多くの誤った新しい行を提供します。私は質問にこの質問をしました。あまり正確ではない形式より良い答えを得ましたが、まだ解決策を得ていません。

OSX 10.14.2 で実行されるコマンドを使用する BASH スクリプトを優先します。よろしくお願いします。

ベストアンサー1

これはあなたにとって気の利いた言葉かもしれません

awk -F, 'n==""||n>$1{n=$1}{while(n!=$1){print n++}}{print;n++}' < input > output

以前の状況と大きく変わらないが、数字系列が突然低い数字に変わる場合の「保護」を除けばです。

おすすめ記事