- 締切済み
linux 制御文2
Linuxを使い始めて3ヶ月目のど素人です 前に、質問したのですが 文章が解りにくかったので再度、書き直して質問です 何卒、宜しくお願いします ↓a.shの中身 if [ $1 = 1 ]; then 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" 部分説明 A・Bをドメイン a1・a2・b1・b2をドメイングループ OK・NGをステータス と表現します 質問部分(スクリプト作成) 1、a.shを実行し結果を「monitor.log」に格納 2、1で出力したファイルをユニークなドメイン数をカウントする 3、2でカウントした数だけループ処理を実行する 3-1、対象のドメインに対するドメイングループ数をカウント 3-2、対象のドメインに対する、グループ「OK」の数をカウントする 3-3、3-1と3-2の数を以下判定する 例 ケース(1)[3-1] = [3-2] ケース(2)[3-1] > [3-2] ケース(3)[3-1] = 0 (1)(2)(3)それぞれの出力結果をhoge.logに出力する 3-4、3-3でケース(1)か(2)だった場合、ドメイン復旧(ステータス)か判定する (直前に実行したファイルmonitor.logのステータスと比較する) 復旧している場合、ログ出力する 長文で申し訳ありませんが、困ってます どなたか救いの手を!
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
>hoge.logの中身は、ケース1か2か3いずれかの、実行結果がファイル出力されています 実行結果を書くのはわかっていますって。実行結果は何なのかを書いてください。 繰り返し同じことを書きますが、 >たとえば、monitor.logが >A,a1,OK >A,a2,OK >B,b1,OK >B,b2,NG >だとすると、 >Aについてがケース1、Bについてがケース2に該当すると思うのですが、そういうことですよね? >この場合、hoge.logの中身はどうなっていてほしいですか? に答えてくださいよ。
- notnot
- ベストアンサー率47% (4900/10358)
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との比較というのもドメインごとに全く独立して行うんですかね。 についてはどうですか?
補足
遅くなってしまい申し訳ないです回答ありがとうございます >何を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との比較というのもドメインごとに全く独立して行うんですかね。 はい、独立させて行いたいです 本当に乏しい説明で申し訳ないです 自分では、これで解ると思っていても 相手に伝えるのは、難しいと痛感しています 精進しますので、意味不明な部分はガシガシ突っ込んでください
- Toshi0230
- ベストアンサー率51% (836/1635)
今ひとつ何に困っているのかよく分からない質問文ですね。 そもそも何がしたいのか? 全体的な作り方が判らないのか、それとも部分部分で判らないところがあるのか? もう少し国語をしっかりと勉強しましょう。 > 2、1で出力したファイルをユニークなドメイン数をカウントする a.sh の作りから言って、「ユニークなドメイン」は2つしかないですよね? ドメイン数が不明で、フォーマットが質問文にあったCSV形式なら、 % cut -f 1 -d "," < monitor.log | sort | uniq | wc -l でユニークなドメインの数をカウントできますね。 ドメイン毎の出現回数を数えたいのであれば、 % cut -f 1 -d "," < monitor.log | sort | uniq -c でOKですね。 > 3、2でカウントした数だけループ処理を実行する ループ処理? 各ユニークドメイン毎に3-1~3-3の処理をすればよいのですかね? > 3-1、対象のドメインに対するドメイングループ数をカウント これもドメイン数と同じ問題があるんですが…ドメイングループの ユニークな数を数えればよいのか、それとも出現回数を数えれば良いのか? monitor.log が a.sh の実行結果である、というのが既知であれば、 スクリプト処理なんかしなくったってユニークなドメイングループ数は「2」です。 ドメイングループ数が不明で、ユニークな数を数えたいのであれば、以下のようにすれば数えることができます(ユニークなドメインの一覧を"domain.txt"に記録しているものとします)。 % for i in `cat domain.txt` ; do grep $i monitor.log | cut -f 2 -d "," | sort | uniq | wc -l ; done ドメイングループの出現数を知りたいのであれば、 % for i in `cat domain.txt` ; do grep $i monitor.log | cut -f 2 -d "," | sort | uniq -c ; done > 3-2、対象のドメインに対する、グループ「OK」の数をカウントする 「グループ」じゃなくて「ステータス」ですよね? それたともかく、これは以下のようにすればカウント可能。 % for i in `cat domain.txt` ; do grep $i monitor.log | cut -f 3 -d "," | grep OK | wc -l ; done もし「ドメイングループ毎の「OK」の数」、ということだとまた少しいじる必要がありますけどね。 > 3-3、3-1と3-2の数を以下判定する 「例」だと、提示されているのはサンプルであって実際には違う、という可能性が出てきますね。 どう判定すればよいのでしょうか? 判定基準がこの「例」の記述の通りとして、"3-1"="3-2"=0 のときはどうすればよいのでしょうか? > (1)(2)(3)それぞれの出力結果をhoge.logに出力する 「それぞれの出力結果」? (1)~(3)は判定結果ですよね? 各ドメイン毎に(1)~(3)のどれかしか出ないのでは? > 3-4、3-3でケース(1)か(2)だった場合、ドメイン復旧(ステータス)か判定する > (直前に実行したファイルmonitor.logのステータスと比較する) 「ドメイン復旧」って何でしょうか? monitor.logはa.shの実行結果ですよね? そのステータスって何でしょう? 3-1~3-3 の処理は、monitor.log に対して実行しているのですよね? 何をどうすればよいのか質問文からはさっぱり判りません。 > 復旧している場合、ログ出力する 何を出力すればよいのでしょう? ……とまぁ、細かく突っ込んでみました。 救いの手をさしのべるのにやぶさかではありませんが、質問内容が曖昧模糊だと答えられるものも答えられません。判らないなら判らないなりに、何が判らないのかを質問してください。
お礼
遅くなりました 自分なりに詳しく知りたい事をまとめて来ました >全体的な作り方が判らないのか、それとも部分部分で判らないところがあるのか? どちらかと言えば、全体的な作り方が判りません と言うのも部分的な処理は、上手く動く事があるのですが その後に続く、処理に繋げられなかったり どう繋げれば良いのかが判らないからです a.shはデバッグとして作ったスクリプトです a.shを実行すると、実行結果をmonitor.logの名前でファイル出力します 1、a.shを実行し出力したファイルからユニークなドメイン数を確認 cut -f 1 -d "," < monitor.log | sort | uniq | wc -l こちらの実行結果を数として、別の処理に繋げる事は可能でしょうか? ドメインAには、ドメイングループが2存在する 2A ドメインBには、ドメイングループが1存在する 1A 例えばこの後の処理で :各ドメインのドメイングループの数に対するステータス値OKの存在(数)を確認 2復旧ドメイン 今回はa.shは、デバッグ用として作成したので復旧したり停止したりする事は ないのですが、実際は復旧したり停止したりするので必要な処理になります 過去の状態(monitor.log)と 現在の状態(hoge.log)を比較する ドメイン・ドメインステータスは、変わらないが ステータス値(OKとNGの事 OKは起動中NGは停止中になります) ドメイン復旧する場合ですが 対象のドメインのドメイングループに対するステータス値が全てNG だったのがどれか、一つでもOKの状態になっていた場合 ドメインが復旧した事になります A,a1,NG A,a2,NG これが A,a1,NG A,a2,OK になった場合 ドメインAをログとして出力します すいません こんな感じですがどうでしょうか? 意味不明な場所は、どんどん指摘してください 宜しくお願いします
補足
遅くなって申し訳ないです回答ありがとうございます Toshi0230様の言う通り、自分は説明するスキルが著しく乏しいと思います ので、不明点はバシバシ突っ込んでください 自分の作りたい、スクリプトは ”各ドメインの状態を検知しエラーを出力する” なんですが、自分の環境下にドメインコマンドが存在しない為 デバッグを作り、それを基に判定させる事が条件なんです そのデバッグがa.shにあたります 再度、見直して質問部分を明確にしてみたいと思います 明日(9/13)までには、出しますので何卒宜しくお願いします なお教えて頂いた、処理は有り難く活用させていただいております 教えていただき有難うございます。
- notnot
- ベストアンサー率47% (4900/10358)
3は、「ドメインそれぞれについて、ドメイングループおよびOKの数をカウント」 ということだと思いますが、同じドメインにし対してドメイングループの重複はないのか?つまり、 A,a1,NG A,a1,NG というケースはないのか?あるとしたら、Aについては1とカウントするのか2とカウントするのか? >(1)(2)(3)それぞれの出力結果をhoge.logに出力する とは?「ケース1」とかのケース名を出力するということ? あと念のためですが、ケース1とは[3-1]=[3-2]≠0ということですよね。 >ドメイン復旧(ステータス)か判定する >(直前に実行したファイルmonitor.logのステータスと比較する) >復旧している場合、ログ出力する 「ステータス」とは?「復旧」とは? また、ケースの判定はドメインごとにあるとおもいますが、前回のmonitor.logとの比較というのもドメインごとに全く独立して行うんですかね。 などなど、わからないことだらけです。
補足
まず、お礼を言わせて頂きます 回答をしてくれた事もですが、自分の拙い文書をここまで理解してくださり感謝です! >3は、「ドメインそれぞれについて、ドメイングループおよびOKの数をカウント」 ということだと思いますが、同じドメインにし対してドメイングループの重複はないのか? 同じドメインに対してドメイングループが重複することは、無いです >>(1)(2)(3)それぞれの出力結果をhoge.logに出力する [3-1]=[3-2]とは、ドメイングループの数とOKの数を比較するし同じ数存在したら真 つまり、3-1にドメイングループが2つ存在(a1,a2) 3-2にステータス値OKが2つ存在(OK、OK2)の場合、真と言う意味です解りますか?(;´Д`) ケース1で[3-1]=[3-2]≠0は、当てはまらないみたいですが ケース2[3-1]>[3-2]≠0みたいです (すいませんまだ、記号の意味を把握しきれていないため意味不明な説明になってます) >「ステータス」とは?「復旧」とは? ステータスと言うのは、OKとNGの事です 例えば、OKなら起動中 NGなら起動中 の意味になります 復旧は、[3-1][3-2][3-3]の実行結果をファイル出力した hoge.logとmonitor.logのステータス値(OKもしくはNG)を比較し OKだった値がNGになっていないか NGだった値がOKになっていないかを判定する事です この場合、NGだった値がOKに変わっていたら復旧したと言う事です
お礼
書き直します またよろしくです
補足
すいません理解しました >Aについてがケース1、Bについてがケース2に該当すると思うのですが、そういうことですよね? >この場合、hoge.logの中身はどうなっていてほしいですか? まず ケース1の場合 A0 ケース2の場合 B1 ケース3の場合 A2 B2 とNGの数が入っています 理解力が弱くて申し訳ないです