ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

sed/awkコミュの初心者なので助けてください

  • mixiチェック
  • このエントリーをはてなブックマークに追加
初心者なのでいろいろ教えていただけると助かります。

波形データを解析するのにawkを使いたいのですが、激ムズで折れてしましました。

振幅 時間 マーク
10 ,  1,  A
9 , 2
8 ,3
7 ,4
6 ,5
5 ,6
4 ,7
3 8
2, 9
1, 10
0, 11
2, 12
4, 13
6, 14
8, 15
10, 16
12, 17,  A
11, 18
10, 19
9, 20
8, 21
7, 22
6, 23
5, 24
4, 25
3, 26
2, 27
1, 28
3, 29
5, 30
7, 31
9, 32
11, 33,  A

こういう波形データがあった場合なんですが。
振幅が最も低くになる時の時間(その行)を抜き出したいのですが、
どうすればいいのかわかりません。
ちなみに、ピークになるときはAのマークで示されていました。
振幅の数値も、データによっては3桁だったりします。(T_T)

どなたか教えていただけないでしょうか?
実際には、スペースで区切られてます。

コメント(5)

検索すれば結構ヒットしますね。

http://www.tkensaku.com/oldwork/AWK/maxmin.html
この辺など参考になるかと思いますが如何でしょう。
> 初心者なのでいろいろ教えていただけると助かります。

初心者質問用のトピックがあるので、単発の質問でトピックを立ててしまうのはいかがかと?
ま、それだけじゃなんなんで。

#! /bin/awk -f
BEGIN { FS = "," }
{
  if (NR == 1) {
    min = $1
    line = $0
  }
  else {
    if (min > $1) {
      min = $1
      line = $0
    }
  }
}
END {
print line
}
# End of Script

急造なんでカッコよくないな〜orz
# アルコールも入ってたりするし。
ま、多少でも参考くらいにはなる・・・・といいなぁ(^^;

レスを追加しない方が良いでしょうか。。。?
自分なら、シェルでやります。
今シェル触れなくて試せませんが、
sort -t , -k 1,1 -n ファイル名| head -1 | awk -Fs, '{system("grep "$1" ファイル名")}'
、でいけるでしょうか?
2 の追記

最低値が複数回あったときに、最初の一回目しか検出しません。
そこまで考えるなら、一回なめて最低値を検出して、2パスめで最低値を
grep、なんてことが必要だと思います。

もしくは、いったん全行を配列に読み込むとか。


----
> 3 ムーさん
>レスを追加しない方が良いでしょうか。。。?

# オフトピックですみません。

立てちゃったものは仕方ないので、有効利用したほうがいい、とALPHA は考えます。

ただ、『利用できる既存のトピックがあるなら、そっち使ったほうがいいよね』
ってのはクチが酸っぱくなるくらい啓蒙していたほうがいいのかな、と思っているので
2 でわざわざ書き込みました。

ALPHA が思う問題点はふたつ
(1) リソースの節約
(2) 知の共有の問題

(1)は、まぁ昔の話で、今のご時勢では気にする必要は無いのかも、とも思います。
# 昔はそれこそ、回線の太さやらサーバ側ディスク容量やら少ない中でやっていた
# ので(回線feeもか^^;)、リソースの無駄遣いにつながるようなコトはよく叱られました

(2)のほうが、もっと重い問題だと思っていて。
質問するひとは、自分に対して回答もらってると思ってるんだろうけど、回答するひと
は必ずしもそうではないんですよね
(少なくともALPHA は、『他の初心者さんも読んで参考にするかもしれない』と思いながら
書き込みしてます)
そうすると単発で『教えてください』だけのトピック立ててもいずれ底のほうに埋もれて
しまって情報が死んでしまう。
# 熱心な初心者さんなら『初心者質問トピック』とタイトルがついていたら過去ログを
# 全部読み漁る、くらいはしますよね?

まぁ、そんな理由からですね


閑話休題
sort | head ってのはALPHAも考えました。
他にもPerl/Ruby なら標準の機能としてsortを持ってますから、エレガントな
解が作れそうではありますね
あのー,波形解析での「最小値」は,波形のボトムを拾うって気がしてならんので,
そないな感じのスクリプト,作って(思い出して)みました.

〜〜〜こっから〜〜〜
BEGIN {
FS = ","
}
{
if (NR > 3) {
if( (v1 <= $1) && (v1 <= v2) ){
print buff
}
}
else {
if (NR == 1) {
next
}
if (NR == 2) {
v1 = $1
v2 = v1
next
}
}
v2 = v1
v1 = $1
buff = $0
}
〜〜〜ここまで〜〜〜

データの先頭に「項目名」と思しきものが入っていることが多いので,今回のは
そないなものに合わせてみたつもりです.
あとは,判断条件を追加していけば応用がきくので,お好きにご利用ください.
cf.) 4行目の不等号を逆にすると,区間の最大値が出てきます.

#インデントが入力内容確認では「確認できてない」ままの書き込みとなってます.
##長時間記録した波形解析にAWKを実際に使っていたのが懐かしいです.

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

sed/awk 更新情報

sed/awkのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング