• 締切済み

linux 制御文2

notnotの回答

  • notnot
  • ベストアンサー率47% (4857/10273)
回答No.3

No1です。 >つまり、3-1にドメイングループが2つ存在(a1,a2) 3-2にステータス値OKが2つ存在(OK、OK2)の場合、真と言う意味です解りますか? いや、それは最初からわかっているのですが、その場合、何をhoge.logに書くのですか? 質問文に書いたことを繰り返すのでなく、こちらの質問に答えてください。 たとえば、monitor.logが A,a1,OK A,a2,OK B,b1,OK B,b2,NG だとすると、 Aについてがケース1、Bについてがケース2に該当すると思うのですが、そういうことですよね? この場合、hoge.logの中身はどうなっていてほしいですか? で、それと上記のmonitor.logを何らかの方法で比較するのですよね?どう比較するのですか? >また、ケースの判定はドメインごとにあるとおもいますが、前回のmonitor.logとの比較というのもドメインごとに全く独立して行うんですかね。 についてはどうですか?

yamihousi
質問者

補足

遅くなってしまい申し訳ないです回答ありがとうございます >何をhoge.logに書くのですか? どう説明をしたらいいか解らず、同じ説明を繰り返してしまいました 申し訳ないです hoge.logの中身は、ケース1か2か3いずれかの、実行結果がファイル出力されています monitor.logが A,a1,OK A,a2,OK B,b1,OK B,b2,NG とhoge.log実行結果を比較します 比較するのは”OKとNG”の違いです OKだったのがNGになっていないか NGだったのがOKになっていないかを判定したいです >また、ケースの判定はドメインごとにあるとおもいますが、前回のmonitor.logとの比較というのもドメインごとに全く独立して行うんですかね。 はい、独立させて行いたいです 本当に乏しい説明で申し訳ないです 自分では、これで解ると思っていても 相手に伝えるのは、難しいと痛感しています 精進しますので、意味不明な部分はガシガシ突っ込んでください

関連するQ&A

  • linux制御文3

    もう自分の中途半端な処理は、書きません まる投げして、申し訳ないですが何方か回答お願いします I/O IN 各ドメインのドメイングループが停止していないか確認する OUT 停止しているドメイングループをログ出力する 全停止している場合は、ドメイン停止ログを出力する 「機能概要」 ドメインステータスの死活監視を行います ドメインステータス確認コマンドを実行{今回このコマンドは、存在しない為デバッグを作る} 各ドメイン内に起動中のドメイングループが存在していることを確認します 全てのドメイングループが停止しているドメインについては、その旨をログ出力します また停止しているドメイングループが存在した場合、その旨をログに出力します 停止中のドメインをリストで管理し停止状態から復旧状態に 回復した場合もその、旨をログ出力します。 部分説明 【項目】         【説明】 ドメイン         デバッグ内のAとB ドメイングループ   デバッグ内のa1,a2,b1,b2 ステータス       デバッグ内のOK(起動中)NG(停止中)  デバッグ        a.sh 「出力例」 A,a1,OK A,a1,OK [デバッグ]a.shの中身 if [ $1 = 1 ]; then #ドメイングループ全てOKのケース echo "A,a1,OK" echo "A,a2,OK" echo "B,b1,OK" echo "B,b2,OK" elif [ $1 = 2 ]; then   #一部ドメイングループが停止中のケース  echo "A,a1,OK" echo "A,a2,NG" echo "B,b1,OK" echo "B,b2,NG" elif [ $1 = 2 ]; then   #全てドメイングループが停止中のケース echo "A,a1,NG" echo "A,a2,NG" echo "B,b1,NG" echo "B,b2,NG" fi > hoge.log 「NGログ例」 [ERROR] A,a1 steatas NG 「グループメンバー全NGログ例」 [ERROR] Domain A steatus NG 「復旧ログ例」 Restoration Domain B,b1 I/Oどうりで、動いてくれれば処理内容はなんでも、OKです 唯一できれば、やめてほしいのが ”awk”コマンドの使用です すいません、まだ使い方がよくわからないのです メンドくさい場合は、使っても大丈夫です・・・ できればです・・・できれば・・・ 何卒宜しくお願いします

  • Linux制御文

    Linuxを使い始めて、3ヶ月目のど素人です if [ $1 = 1 ];then echo A,a1,OK echo A,a2,OK echo B,b1,OK echo B,b2OK elif [ $1 = 2 ];then A,a1,OK A,a2,NG B,b1,OK B,b2,NG elif [ $1 = 3 ];then A,a1,NG A,a2,NG B,b1,NG B,b2,NG fi スクリプトの中身(質問部分) cat ($1か$2か$3) | soet | cut -d ,-f1 | uniq -c    ↑ここにファイルを入れたい スクリプトに引数$1か$2を渡した時 新しくファイル出力して、そのファイルが、cat の場所に入れたい 解りにくくて申し訳ないですが、困ってます!どうか宜しくお願いします

  • if文がうまくできません;;

    こんにちわ。 当方、linux初心者です。 今if文を作っているのですが、どうしてもうまくいきません。 ●lsで出力した結果が何行出力されたかによって回答が変わるシェルを作成してください。(10以上と9~3と2以下の3種類) という例題を解答中ですが、下記のとおり作ったのですが 何かアドバイスは頂けませんか? お願い致します。 #!/bin/bash ls -l > case.txt P=`cat case.txt | wc -l` if $P -ge 10 then echo '10以上' elif $P -ge 3 ; then echo '3以上' elif $P -le 2 ; then echo '2以下' fi

  • テーブル設計について。

    テーブル設計について。 DBから集計して、このような表を出しているのですが、 現在、レコードが10万件ほどあり、集計のクエリが終わるまで7秒近くかかっています。 ※以下、タブ区切りにしてありますので、エディタなどに貼り付けて頂くと見やすいと思います。 【表】 質問グループ 質問タグ 答えOK数 答えNG数 A a 2 1 A b 2 0 B a 1 2 【DB】 テーブル:test id answer group tag 1 OK A a 2 NG A a 3 OK A a 4 OK A b 5 OK A b 6 OK B a 7 NG B a 8 NG B a 【クエリ】 SELECT group, tag, SUM(CASE WHEN answer='ok' THEN 1 ELSE 0 END) AS ok, SUM(CASE WHEN answer='ng' THEN 1 ELSE 0 END) AS ng FROM test GROUP BY group, tag; ※「id」をprimaryキー、「group、tag、answer」をまとめてuniqueとしてインデックスを貼ってます ok数とng数の集計に時間がかかってしまっているのですが、 他に良い方法があれば教えて下さい。 また、そもそものテーブル構成を以下のようにすればいいのでは? とも思ったのですが、どうなんでしょうか? この形に変えると、集計は一瞬で終わるはずなのですが、 ok と ngを別カラムにするという考え方がしっくりきません。 テーブル構成の考え方としてどうなのか知りたいです。 下のようにすると、okカラムとngカラムの片方にしか値は入らなくなってしまうので、 それだったら最初の構成のように、answerカラムにokかngのどちらかが入るといった方が好ましいのかなとも思い・・ それと今回はたまたまok と ngの固定2つですが、複数になるような場合もあると思うのです。 テーブル:test id group tag ok ng 1 A a 1 NULL 2 A a NULL 1 3 A a 1 NULL 4 A b 1 NULL 5 A b 1 NULL 6 B a 1 NULL 7 B a NULL 1 8 B a NULL 1 SELECT group, tag, sum(ok), sum(ng) FROM test GROUP BY group, tag; ご教示下さい。

    • ベストアンサー
    • MySQL
  • case inの制御文

    シェルスクリプトの下記ソースに間違いはないですか? 最後のesacの次に改行は必要ですか? #!/bin/sh echo teststart i=2 case $i in 1) echo "a" ;; 2) echo "b" ;; *) echo "c" ;; esac

  • シェルスクリプトのifでの正規表現で\wが利用不可

    なのですがどうすればいいでしょうか? 端末で x=a.out;if [[ $x =~ \.\w+$ ]];then echo ok;else echo ng;fi ng となり\wが使えません 一方 x=a.out;if [[ $x =~ \.[0-9a-z]+$ ]];then echo ok;else echo ng;fi ok です \wの代わりに[0-9a-z]+は長すぎるので何とかしたいのです 何かいい方法はないでしょうか? よろしくお願いします

  • vbsのif文で複数条件の判定

    例えば以下である場合、 WScript.echo AAA WScript.echo BBB vbsを実行すると "?"が表示されます。 "OK"が表示されない原因として考えられる事はありますでしょうか If AAA = false Then If BBB = false Then WScript.echo "OK" else WScript.echo "NG" End If else WScript.echo "?" End If

  • シェルスクリプトで引数をファイル名に使うには?

    シェルスクリプトでutfとshift-jisの変換を行いたいと思ってます。 ファイル出力のところでファイル名を$1と引数にするとうまくいきません。(変換されてなかったり、空ファイルできたり) >! $1 ではなく $1.xx とかにするとうまくいきます。 どうしたら引数のファイル名に出力できるでしょうか? #!/bin/sh if [ $2 = 'us' ] then cp $1 $1.utf8 iconv -f UTF-8 -t SHIFT-JIS $1 >! $1 echo "$1 UTF-8 => SHIFT-JIS [ OK ]" elif [ $2 = 'su' ] then cp -f $1 $1.sjis iconv -f SHIFT-JIS -t UTF-8 $1 >! $1 echo "$1 SHIFT-JIS => UTF-8 [ OK ]" else echo "$1をコンバートできませんでした。" fi

  • "#"をcase文のパターンニ指定する

    題名にあるように、具体的には case $1 in #aaaa) echo OK! ;; *) echo NG ;; esac という風に引数に、#、を用いた場合のスクリプトを書きたいのですが 2行目の#の行がコメント行として扱われるのか うまく処理できません。 どうしたらよいでしょうか? よろしくお願いします。

  • 値によって組み分けを作成するプログラムについて

    こんにちは。 プログラミングでつまってしまったため質問させて頂きます。 プログラミング言語はC++です(visual c++ではありません)。 ■作成したいプログラム A,B,C,D,Eがある。 AとBの類似度は91% 以下同様に AとCは89% AとDは79% AとEは77% BとCは93% BとDは97% ・・・のように続いていく.. (*ABが似ている、BCが似ている。だからと言ってACが似ているとは言えない。) この中で、類似度が閾値以上である場合は同じ組とする。 ただし、複数のパターンが考えられる場合は組の数が一番すくなくなるように作る。 ■プログラムの動作イメージ 例1: 閾値=0.90 //入力データ 01 = 0.91; OK 02 = 0.90; OK 03 = 0.78; NG 04 = 0.83; NG 12 = 0.94; OK 13 = 0.78; NG 14 = 0.77; NG 23 = 0.78; NG 24 = 0.69; NG 34 = 0.94; OK OKなのは,01,02,12,34 つまり以下のような出力が得られる >>0,1,2 >>3,4 --------------------------------------- 例2: 閾値=0.90 //入力データ 01 = 0.91; OK 02 = 0.90; OK 03 = 0.94; OK 04 = 0.83; NG 12 = 0.95; OK 13 = 0.78; NG 14 = 0.77; NG 23 = 0.78; NG 24 = 0.69; NG 34 = 0.94; OK OKなのは,01,02,03,12,34 つまり 0,1,2 3,4 or 0,3 1,2 4 となった場合は、組数の少ない上を選択する。 従って以下のような出力が得られる。 >>0,1,2 >>3,4 --------------------------------------- 例3: 閾値=0.90 //入力データ 01 = 0.91; OK 02 = 0.90; OK 03 = 0.78; NG 04 = 0.83; NG 12 = 0.77; NG 13 = 0.78; NG 14 = 0.77; NG 23 = 0.78; NG 24 = 0.69; NG 34 = 0.94; OK OKなのは,01,02,34 この場合は、01と02は閾値を超えているが、12は閾値を超えていないため、 0,1,2を同じ組とはできない。 従って以下の2パターンが考えられる。 0,1 2 3,4 or 0,2 1 3,4 この場合は組の数は同じなのでどちらが出力されてもOK。 番号の若いものから出力されるとすると以下のような出力が得られる。 >>0,1 >>2 >>3,4 ------------------------------------------------------ 以上のようなプログラムを作成したいです。 自分で考えてみたのプログラムが以下のものです。 01,02,12,34は閾値を超えているということまではできたのですが、その後のグループの作り方のところで詰まってしまいました。 そこで、上記のような動作をするプログラムについて教えていただきたいです。 よろしくお願い致します。 int main(){ //閾値 double THRESHOLD = 0.9; //dataを格納する配列 double in_data[5][5] = {0}; //group_flagを格納する配列 bool group_flag[5][5] = {0}; in_data[0][1] = 0.91; in_data[0][2] = 0.90; in_data[0][3] = 0.78; in_data[0][4] = 0.83; in_data[1][2] = 0.94; in_data[1][3] = 0.78; in_data[1][4] = 0.77; in_data[2][3] = 0.78; in_data[2][4] = 0.69; in_data[3][4] = 0.94; //組の番号を格納する配列    //group[3]=2だったら、データ3はグループ2に入る int group[5]; int i=5; //データ数 int num=0; for(int n=0; n<=i; n++){ for(int m=n+1; m<i ;m++){ cout << "in_data[" << n << "][" << m << "]=" << in_data[n][m] << endl; if(in_data[n][m] >= THRESHOLD){ cout << "OK" << endl; group_flag[n][m] = 1; } } } for(int n=0; n<=i; n++){ for(int m=n+1; m<i ;m++){ if(group_flag[n][m] == 1){ cout << n << m <<endl; } } } }