|
シェルで、dateコマンドで取得した時間から5分前の の時間を取得したいのですが、できるでしょうか。 date +%H%M%S と実行します。 結果として、「130530」が取得できます。 そこから、取得した、「1305030」から5分前の「130030」を 求めたいのですが、できるのでしょうか。 環境は、 Solaris、shです。 |
|
>>4560 べた 上にある方が、現実的な解です。 - perl で localtime(time-5*60) - GNU date をインストールして date --date '5 minutes ago' - http://x68000.q-e-d.net/~68user/cgi-bin/wwwboard.cgi?log=1382 的なやり方 - http://home.catv.ne.jp/pp/ginoue/bn/descend.html の「2002/04/02 ひとこと」 的なやり方 |
|
プロパーや一次請けが perl を嫌がったり、ましてや非純正な物 (GNU プロダクト)を入れるなんて駄目なんて悲惨な職場を経験したので... Solaris 付属の date コマンドに %T って有りますか? 無かったとしても date +%H:%M:%S って書き方は利用可能ですか? 結果として、13:05:30 が取得できるなら、予め IFS_OLD=$IFS ; IFS=":" して 2 番目のフィールドが 5 未満か? とか 1 番目のフィールドが 0 以下か? って 辺りを条件に繰り下がり処理を手作りするのもありますね。 |
|
あ... 68user さんが例示してるやん。 リンクは読んでから書かないと駄目ね。 |
|
>>4561 68user >>4562 hoge ありがとうございます。 日付またがりなどを考えるとPerlでやる方法がいいです。 Perlでやります。 もう1つ質問があります。 シェルを起動し、起動した時間から5分前に出力された時間以降の syslogの内容を別ファイルに出力したいのですが、できるのでしょうか。 例えば、 今が、18:00:00とします。 シェルを起動し、18:00:00を取得します。 18:00:00を基にして、5分前の17:55:00を取得します。 「Apr 6 18:55:00」以降に出力されたsyslogをすべて 別ファイルに出力します。 ということ実現したいのです。 時間は、 $tm = time - 300; my $now = strftime "%b %e %H:%M:%S", localtime($tm); で取得します。 |
|
あるファイルから指定日時以降に書かれたレコードを 抽出したいのですが、シェルスクリプトでできるので しょうか。 どのしょうにシェルにすればよいか教えてください。 例えば、今が、2006/04/08 12:30:00とします。 ある指定日時というのは、現時点から5分前としますので、 2006/04/08 12:25:00となります。 ファイルでは、「Apr 8 12:30:33 ・・・・・」と出力 されているので、5分まえの時間を、「Apr 8 12:25:00」 で取得し、「Apr 8 12:25:00」以降に書かれたレコードを ファイルに出力したいのです。 環境は、 Solaris8、sh、Perlで実現したいのです。 |
|
>>4566 べた 無理ではないかと思うのですが。 「Apr 8 12:30:33 ・・・・・」の比較、チェックが簡単 にできないと思います。 こういうのはどうですか。 5分前に動いた時のファイルのレコード数と今回動いた時の ファイルにレコード数の差をtailコマンドでファイルに出力 というのは。? |
|
>>4567 まんたろう > 「Apr 8 12:30:33 ・・・・・」の比較、チェックが簡単にできないと思います。 echo "Apr 02 12:25:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}' として行番号をとって、その行以降を tail で出力とか。 まぁ筋の悪いやり方だとは思いますので、他の方法がよいでしょう。 |
|
>>4568 68user >echo "Apr 02 12:25:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}' >として行番号をとって、その行以降を tail で出力とか。 予めファイルの全体のレコード数も必要ということですか。 マイナスとなった場合、どうなるのですか。? |
|
>>4578 EBA echo "Apr 10 09:30:00 ===" | sort -M - logfile | cat -n | grep "===" | awk '{print $1}' と実行してみたのですが、行番号が2となります。 # cat logfile <pre> Apr 9 12:23:01 ・・・・・・・ Apr 9 15:17:43 ・・・・・・・ Apr 9 17:48:06 ・・・・・・・ Apr 9 18:05:30 ・・・・・・・ Apr 9 18:06:24 ・・・・・・・ Apr 10 09:23:08 ・・・・・・・ Apr 10 11:47:23 ・・・・・・・ Apr 10 13:35:49 ・・・・・・・ Apr 11 09:54:11 ・・・・・・・ Apr 11 12:17:38 ・・・・・・・ </pre> 行番号ではなく、すべてを表示したのですが、 sortが正しく行われていないみたいなのですが、 どうしてなのでしょうか。 <pre> # echo "Apr 10 09:30:00 ===" | sort -M - logfile | cat -n 1 Apr 9 12:23:01 ・・・・・・・ 2 Apr 10 09:30:00 === 3 Apr 9 15:17:43 ・・・・・・・ 4 Apr 9 17:48:06 ・・・・・・・ 5 Apr 9 18:05:30 ・・・・・・・ 6 Apr 9 18:06:24 ・・・・・・・ 7 Apr 10 09:23:08 ・・・・・・・ 8 Apr 10 11:47:23 ・・・・・・・ 9 Apr 10 13:35:49 ・・・・・・・ 10 Apr 11 09:54:11 ・・・・・・・ 11 Apr 11 12:17:38 ・・・・・・・ </pre> 行番号以降をtailで出力は、 # tail +行番号 logfile でできました。 |
|
>>4570 べた Linux ではうまくいきましたが、Solaris 環境がないので確認できません。 どなたかご確認いただけませんか? あと、このやり方は新年 00:00:00〜00:05:00 の間はうまく動作しませんので、 おすすめしません。念のため。 |
|
>>4571 68user ありがとうございます。 >あと、このやり方は新年 00:00:00〜00:05:00 の間はうまく動作しませんので、 >おすすめしません。念のため。 確認して頂いたのですか。 良い方法だと思ってはいたのですが、ダメですか。 他に、良い方法があるのでしたら伺いたいのですが。 |
|
おひさしぶりです。自分が困ったときだけ出てきてすみません。 Windows のマシンと UNIX のマシンが存在する LAN で、 お互いにメールを送りあうというテストをやっています。 ここでは簡単のため、Windows マシン1台と UNIX マシン1台とします。 W に pmail というフリーウェアの SMTP / POP サーバーを入れた人がいて、 W と U の両方に Mozilla Thunderbird を入れて、 Thunderbird のアカウント設定で、 W の IP アドレスを SMTP / POP アドレス欄に指定することで、 W と U の間でメールのやり取りをすることができました。 しかし、テストの要件のひとつに、 U 側では MUA として /bin/mail も使えるようにする、というものがありました。 sendmail の設定を変えようとしようと思ったのですが、 それは大変だからやめたほうがいいと上司に言われ、 言われるままに U に Postfix を入れました。 ちなみに U の OS は HP-UX 11i ver.2 です。 Postfix のインストールはなんとなく終わりました。 /etc/postfix/main.cf に myhostaname = U.unix.net と変更を加えました。 DNS を立てるのはなかなか面倒だと上司に言われたので、言われるままに U の /etc/hosts および W の C:\Winnt\system32\drivers\etc\hosts に 172.16.10.2 U.unix.net 172.16.10.3 W.windows.net のように書きました。 で、U 側で # mail root nantoka kantoka . のように書くと、 で自分宛に出したメールが確認できましたが、 # mail dareka@W.windows.net nandakakandaka . のようにすると、 Diagnostic-Code: X-Postfix; Host or domain name not found. Name Service error for name=W.windows.net type=A: Host not found のように怒られます。 (ここで、dareka は W の pmail に設定したメールアカウントです。) U から # nslookup > W.windows.net とすると 172.16.10.3 が、 > 172.16.10.3 とすると W.windows.net が正しく帰るのですが、 host W.windows.net とすると not found 3(NXDOMAIN) と言われます。 このへんが原因でしょうか。 この状況で、U から W に /bin/mail でメールを出すことができるでしょうか。 また、W の Thunderbird から出したメールを U の /bin/mail で受けるためには、qpopper のようなプログラムを U に入れないといけないのでしょうか。 他に、いまの私の状況でもっと簡単にテストするアイディアがわかれば ご教示ください。 いろいろ聞いてすみません。よろしくお願いします。 |