ノイズの多いデータを含むCSVファイルを強力に分割します。

ノイズの多いデータを含むCSVファイルを強力に分割します。

次の列を含むcsvファイルがあるとします。

timestamp,cpu,memory

実際のデータ型の例は次のとおりです。

CPU/Mem CSVデータチャート

このようにデータを可視化することで、人間の目は、CPU を多用する 4 つのアクティビティがどこから始まり終わるかを簡単に確認できます。

R理想的には、などを使用せずに標準のUnixコマンドラインツールを使用する簡単な方法は何ですかoctave「grep」は、この4つのアクティビティの開始と終了を示すファイルの8行だけを表示します。、「cpu」列に基づいていますか?

明らかに、これは少しあいまいでデータにノイズがありますが、開始/終了に近い8行を提供するソリューションは高く評価されます。

csvファイルから簡単に抜粋したもので、4つのアクティビティが急増した最初のアクティビティのみが表示されます。

10:44:21.310,0,53567488
10:44:22.310,1.56257,53575680
10:44:23.326,0,53854208
10:44:24.325,34.3761,57405440
10:44:25.325,73.43985,61747200
10:44:26.325,3.1251,69459968
10:44:27.325,0,69459968
10:44:28.325,0,69459968
10:44:29.325,65.6271,74756096
10:44:30.325,53.1267,77783040
...
10:50:56.450,35.93865,142700544
10:50:57.450,10.93785,142897152
10:50:58.450,1.56255,142897152
10:50:59.450,0,142897152
10:51:00.450,0,142897152
10:51:01.450,0,142897152

理想的には、次の2行が生成されます。

10:44:24.325,34.3761,57405440
10:50:58.450,1.56255,142897152

10:44:26.325しかし、その間に数秒間CPUアクティビティがないので、10:44:28.325答えはそれほど賢く、データを「スムーズに」するようなことをしないと思います。したがって、上記のcsvフラグメントが次の4つの行を生成すれば十分です。

10:44:24.325,34.3761,57405440
10:44:26.325,3.1251,69459968
10:44:29.325,65.6271,74756096
10:50:58.450,1.56255,142897152

ベストアンサー1

1つの方法は、awkしきい値に達する最初の行とその下の最後の行を取得するようにしきい値を設定することです。次のように動作します。

awk -F, -vthreshold_up=20 -vthreshold_down=10 'BEGIN {
                          cur = "gt";
                        } 
                        {
                          if (cur == "gt" && $2 > threshold_up) {
                            print;
                            cur = "lt";
                          } else if (cur = "lt" && $2 < threshold_down) {
                            print;
                            cur = "gt";
                          }
                        }' file.csv

おすすめ記事