一般的な関数でないのでしょうか? RST送信するんですが・・ |
>>3459 Hide わたしは初めて聞きました。 |
Bシェルなのですが、tarで標準出力した結果をteeでファイルに出力し なおかつ、tarの正常、異常を判断したいのですが、どうすればよい のですか。 tar -cvf /dev/rmt/0m * 2>&1 | tee -a kekka.txt と行ったのですが、標準出力及びkekka.txtに出力されたのですが、 $?の値が常に「0」の状態です。 標準出力、ファイルへの出力、$?の判定を行えるよにするにはどう すればよいのですか。 |
>>3461 だん ちゃんとステータスコードを取れるみたいですよ。 % true | tee -a kekka.txt; echo $? 0 % false | tee -a kekka.txt; echo $? 255 と思ったら、取れるのは csh・tcsh だけで sh (Solaris2.6)・bash は 無理みたいですね。 sh では % true && succeed=OK % echo $succeed % false || succeed=NG % echo $succeed や % true && echo OK | tee -a kekka.txt % false || echo NG | tee -a kekka.txt はいけるのに、 % true && succeed=OK | tee -a kekka.txt % echo $succeed % false || succeed=NG | tee -a kekka.txt % echo $succeed は $succeed に値が入らない。なんでだろう。 # サブシェルで実行されるから? というわけで、Solaris2.6 の sh では % (true; echo $? >result) | tee -a kekka.txt % cat result % (false; echo $? >result) | tee -a kekka.txt % cat result とステータスコードをファイルに保存するというかっこ悪い方法で 実現できました。より美しいやり方を募集中です。 |
>>3462 68user 俺には美しいやり方なんて無理ですが、ファイルじゃないだけなら % ( true ; rc = $? ) | tee > kekka.txt てのは?;-) |
>>3463 has ああ、すみません、3462をよく読んでませんでした。 68userの言う、&&とか||の処理詳細と(;)の違いは良く知らないんですが、 redhat 9.0のshでは3463のやり方ができたもので。 一応ご報告まで。 |
>>3463 has それだと (〜) の部分はサブシェルが実行することになります。 サブシェルのシェル変数は確かに $rc=1 になるけれど、親の シェルのシェル変数には影響しないので、結局 (〜) の外から $rc を参照することはできないと思います。 ちなみに a && b は、a のステータスコードが 0 のときのみ b を実行 a || b は、a のステータスコードが >0 のときのみ b を実行 です。 |
はじめまして. httptalker をしばらく前から愛用しております. 非常に強力なツールで,Webから必要な情報を取得し目的にあわせて加工するなど の用途でたいへん助かっているのですが,ひとつ質問をさせてください. パスワードの認証の後でCookieを受け渡す形式のWebSite のデータをGETする よい方法は,あるでしょうか? httptalker のScript の中にCookie のやりとりをする機能を埋め込めばよさそう ですが,わたしにはかなり難しいのです. |
>>3466 capricio えーっと、お使いのものはこれですか? http://x68000.startshop.co.jp/~68user/net/sample/http-client-2.pl これは解説用のサンプルなので、実際の使用はおすすめしません。 じゃなくて http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/bin/httptalker これをお使いなら、あまりに汚いコードだったので、さきほど少し 書きなおしました。ついでに追加ヘッダを指定できるようにしました。 % ./httptalker -GET http://example.com/foo/bar -add-header 'Cookie: a=b' で cookie を送信できます。 http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/bin/httptalker?rev=1.3&content-type=text/plain ここからどうぞ。 ただし、これの使用もおすすめしません。テストもしっかりしていないし、 機能面でも劣るからです。 というわけで、できるならば - wget (--load-cookies=ファイル名 で cookie を指定できる) - LWP モジュール付属 (libnet モジュール) の GET コマンド。 オプション -H 'Cookie: a=b' で cookie 送信可能。 - H_HTTP モジュール (http://www.studyinghttp.net/H_HTTP.html) などを使った方がよいでしょう。 |
>>3462 68user $ ( true | tee -a kekka.txt ) & ; wait $! ・・・・・やっぱり綺麗じゃないですね。 |
すみません徹夜明けでボケてました。 吊って来ます・・・ |
>>3463 has 俺には美しいやり方なんて無理ですが、ファイルじゃないだけなら % ( true ; rc = $? ) | tee > kekka.txt てのは?;-) 私は、HP-UXを使用しているのですが、 % ( true ; rc = $? ) と実行するとシステムのシャットダウンになります。 他のOSも同じだと思うのですが、使用するときは注意した方が 良いと思います。 |
>>3470 くに > % ( true ; rc = $? ) > と実行するとシステムのシャットダウンになります。 /etc に PATH が通っていたため /etc/rc が実行されたのではないかと 思います (引数は = と $?)。 sh の変数代入は = の前後に空白を入れてはいけないので、 rc = $? でなく、rc=$? ですね。 |
lsコマンドについて質問です。 lsと実行するとファイル名やディレクトリ名が表示されますが、 ファイル名だけとかディレクトリ名だけとかを表示させたいの ですが、できるのでしょうか。 manで調べてみたのですが該当するものもありません。 何かと組み合わせてて1行でできないものでしょうか。 |
>>3472 hanzen > lsと実行するとファイル名やディレクトリ名が表示されますが、 > ファイル名だけとかディレクトリ名だけとかを表示させたいの > ですが 以下のやりとりを参考にしてください。 >>3245 bebe >>3246 68user |
>>3465 68user すみません、勘違いしてました。 3463 でできたと思っていたら、1行ずつ実行したときにセットした rcの値が表示されただけでした。 >>3470 くに それは予想していませんでした。 何にせよ紛らわしいのはよくないですね。 気をつけます。 というわけで何かよい方法はないか探してみましたが、 bashだとこういうのがあるみたいです。 (ただしシェルスクリプト内限定らしいですが) $ echo $BASH_VERSION 2.05b.0(1)-release $ cat pipetest.sh #!/bin/bash true | false | true | false echo ${PIPESTATUS[@]} $ ./pipetest.sh 0 1 0 1 あとはこんなん:-< cp /dev/null kekka.txt ; tail -f kekka.txt & pid=$! ; command > kekka.txt ; st=$? ; kill $pid echo $st |
>>3465 68user 恥の上塗り。 いろいろと試してみましたが、 ファイルを作成せずにステータスは取得できそうにありません。 後は作成するファイルが通常のファイルかFIFOかくらいの違いでしょうか? ------ #!/bin/sh fifo="fifo.$$" mkfifo -m 600 $fifo trap "rm -f $fifo" 0 1 2 3 15 ( command ; echo $? >$fifo ) | tee kekka.txt & rtn=`cat $fifo` echo $rtn >>3472 hanzen >>3473 68user 後は ls -F | grep '/' とかでしょうか。表示に/がついてしまいますが。 |
UNIXでファイルを開かずにファイルの解析を行いたいのですが、 fileコマンドでは実行ファイルなのかどうかなど、詳しいことが わかりませんでした。 #C言語関連のソースかどうか確認したいのです。 何か、他にいい方法はないでしょうか? 教えていただけるとありがたいですm(__)m |
こんにちは。 以前、こちらで幾らか質問させて頂いた tomo と申します。 今、perlでタイマ処理をする事を考えているのですが、 perlではC言語の様にタイマIDという形で複数のタイマを 識別管理する事は出来ないのでしょうか? |
>>3476 橘 調べたいのは > fileコマンドでは実行ファイルなのかどうか と > C言語関連のソースかどうか のどちらですか? 「〜かどうか判定したい」ということなら、何らかの判断基準が ないと判定できませんので、そこらへんを明確にしてください。 >>3477 tomo > perlではC言語の様にタイマIDという形で複数のタイマを > 識別管理する事は出来ないのでしょうか? C にも perl にもタイマ ID という概念はありません。 そもそも「タイマ ID」とは Win32API (MFC?) のそれですか? なら、perl で Win32API を利用できるモジュールを探せば できるでしょうが、あいにく Windows には明るくないので http://www.cpan.org から探してみてください。 |
68user 様 UNIXの部屋等、ちょくちょく参考にさせて頂いております。ありがとうございます。 私、現在、DNSまわりのプログラミングを行っておりまして、ネットワークプログラミングの基礎知識の DNS クライアントを作ってみようのページを、基礎から理解する意味で読ませて頂いたのですが、 この(2)のページ、http://x68000.startshop.co.jp/~68user/net/resolver-2.htmlの DNSヘッダのフラグの部分の第13〜15bitの3bitがRCODEとなっていますが、これは第13〜16bitの4bit分の 間違いだと思うのですがいかがでしょうか。 細かい部分で申し訳ないのですが、気になりましたのでご報告させて頂きました。お忙しいとは思いますが、 よろしくお願いいたします。 |
>>3479 なっち ご指摘ありがとうございます。修正しました。ついでに 1…15bit、16…31bit となっていたものを 1…16bit、17…32bit に修正しました。 # http://x68000.startshop.co.jp/~68user/cgi-bin/cvsweb.cgi/public_html/net/org/resolver-2.html しかし、一般的には MSB を第 0bit とする場合が多いでしょうか? 「詳解TCP/IP Vol.1」では 0〜31bit となっていましたので、 悩むところです。 |
何をもってして一般的というかによりますが・・・ ハードウェアでは、例えばverilogのバス表記の例にとると、 [15:0] > [0:15] >>> [1:16]という頻度で見かけます。 僕の知っている限りの物理層では、[0]が時間軸で最初に 送受信されるので、[0:15]という表記が現れます。 とはいえ、中身を解釈する際に、[15:0]のように置き換え ないと、人間には理解し難い事が多々あり、そのような処理 は僕はよくします。 |
awkの使い方について教えて下さい。 awkを使用して、以下の出力を、数字は、3桁毎にカンマで区切り、 出力位置を揃えて出力したいのですが、 180 file1.txt 1821 file2.txt 113457 fil3.txt を 180 file1.txt 1,821 file2.txt 113,457 file3.txt と出力したいのですが、 数字の部分を揃えることができません。 そのため、たの部分もそろいません。 どうすれば上手くできますか。 ------------------------------- #!/bin/sh # cat list.txt | sort -n -r | awk ' function put_comm(val) { if (val < 1000) { printf("%d",val) ; } else { put_comm(val / 1000) ; printf(",%03d",val % 1000) ; } } { if ($1 < 1000) { printf("%d",$1) ; } else { val=$1 ; put_comm(val) ; } } { #printf "\n" printf(" %s\n",$2) }' |
いつも参考にさせていただいてます dtterm上で動作するC言語のプログラムを作成しています そのプログラムで、cursesのwaddchとwrefreshを使用して1画面分の描画を1文字ずつ行っているのですが、 その際にカーソル表示がされているため、ちらついてしまいます カーソルを一時的に消す方法は無いでしょうか? ちなみに、waddchで画面編集後、最後にwrefreshを1回呼ぶ方法ですと、 一気に1画面分を表示できるのですが、編集時間が長く感じられるため、 1文字ずつパラパラと表示したいと考えています。 |
>>3482 米 桁数の上限がわからないと駄目ですが こんなのでどうでしょ?(下では8桁まで) ------ $ cat list 123 file1.txt 123456 file2.txt 1234567 file3.txt $ cat test.awk #!/bin/nawk -f { i = sprintf("%d",length($1) / 3) ; j = sprintf("%d",length($1) % 3) ; if ( i > 1 ) { if ( j == 0 ) j = 3 ; str_buf = sprintf("%s",substr($1,0,j)) ; for ( k=0 ; k<i ; k++ ) { cut_str = substr($1,j+(k*3)+1,3) ; if ( cut_str == "" ) break ; str_buf = sprintf("%s,%s",str_buf,cut_str) ; cut_str = "" ; } } else { str_buf = $1 ; } printf("%10s %s\n",str_buf,$2) ; } $ ./test.awk list 123 file1.txt 123,456 file2.txt 1,234,567 file3.txt |
>>3481 へにか > 僕の知っている限りの物理層では、[0]が時間軸で最初に > 送受信されるので、[0:15]という表記が現れます。 なるほど。ネットワークプログラミングでは当然ネットワーク バイトオーダで MSB が先になるわけなので、 [0:15] か [1:16] のどちらかで決まりですね。 個人的には「プログラマたるもの数えるときは 0 から」という ことで、そのうち [0:15] に修正しておこうと思います。 >>3483 tonpei curses はよくわかってませんが、curs_set(0) ですかね。 capability 的には cursor_invisible (vi) っぽいです。 ただ、端末エミュレータにカーソルを消す機能があるかという 問題があるかもしれません。うちの FreeBSD の /etc/termcap に xterm-basic|xterm common (XFree86):...:vi=\E[?25l:... とあったので xterm で % printf "\033[?25l" とするとカーソルが消えましたが、kterm-6.2.0_5 では消えません でした。kterm にカーソルを消す機能がないような感じがします。 でもまぁ dtterm なら多分大丈夫だとは思います。 |
>>3484 zsh 環境も書かずに質問して申し訳ありません。 HP-UX11.00です。 nawkが入っていないので、awkに変えて実行しました。 一応、上手く動きました。 cat list.txt $1 | sort -n -r | awk ' { i = sprintf("%d",length($1) / 3) ; j = sprintf("%d",length($1) % 3) ; if ( i > 1 ) { if ( j == 0 ) j = 3 ; str_buf = sprintf("%s",substr($1,0,j)) ; for ( k=0 ; k<i ; k++ ) { cut_str = substr($1,j+(k*3)+1,3) ; if ( cut_str == "" ) break ; str_buf = sprintf("%s,%s",str_buf,cut_str) ; cut_str = "" ; } } else { str_buf = $1 ; } printf("%10s %s\n",str_buf,$2) ; }' |
>>3486 米 以下の様に、数字が5桁、4桁は正しくでませんでした。 123 file1.txt 1234 file2.txt 12345 file3.txt 123456 file4.txt 1234567 file5.txt |
>>3487 米 if ( i > 1 ) { を if ( i >= 1 ) { です。 |
>>3488 米 すみません、その部分のif文自体不要でした。 (不要になるように修正してたのを忘れてました。) ----- $ cat list 1 file1.txt 12 file1.txt 123 file1.txt 1234 file2.txt 12345 file3.txt 123456 file4.txt 1234567 file5.txt $ cat test.sh #!/bin/sh sort -n -r $1 | awk '{ i = sprintf("%d",length($1) / 3) ; j = sprintf("%d",length($1) % 3) ; if ( j == 0 ) j = 3 ; str_buf = sprintf("%s",substr($1,0,j)) ; for ( k=0 ; k<i ; k++ ) { cut_str = substr($1,j+(k*3)+1,3) ; if ( cut_str == "" ) break ; str_buf = sprintf("%s,%s",str_buf,cut_str) ; cut_str = "" ; } printf("%10s %s\n",str_buf,$2) ; }' $ sh test.sh list 1,234,567 file5.txt 123,456 file4.txt 12,345 file3.txt 1,234 file2.txt 123 file1.txt 12 file1.txt 1 file1.txt |
68Userさん、回答ありがとうございました またまた質問がありますので、どなたか回答よろしくお願いします 環境:HP-UX Ver.11.0 1.XWindowのログイン後、言語選択の画面が表示されますが、この画面を出さずに、デフォルトで ATOKを選ぶ方法は? 2.XWindowの起動後、ウインドウ内に、ツールバー(端末起動、エディタ起動などのボタン郡)が 表示されますが、これを非表示(アイコンも無くす)にする方法は? 以上、2件についてご存知でしたら、回答お願いします |
HP-UXですが、シェルについて教えて下さい。 printfを使用して書式で、変数の中身を出力しているのですが 上手くできません。 ----------------- #!/bin/sh name1="yamada" name2="taro" printf "%s %s --> %s\n",${name1} ${name2} NG exit 0 ------------ とすると yamada NG --> ,taro となってしまいます。 |
>>3490 tonpei http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse の 「回答をもらったら結果を報告する」 をよく読んでください。なお、>>3490 の質問については わかりません。 >>3491 みの > printf "%s %s --> %s\n",${name1} ${name2} NG カンマが余分だと思います。 printf "%s %s --> %s\n" ${name1} ${name2} NG > yamada NG --> > ,taro > となってしまいます。 本当ですか? taro NG --> ,yamada になりませんか? |
http://x68000.startshop.co.jp/~68user/net/ ネットワークプログラミングの基礎知識 の http://x68000.startshop.co.jp/~68user/net/crypt-1.html 暗号化のお話 (1) 共通鍵暗号方式 を更新し、 http://x68000.startshop.co.jp/~68user/net/crypt-2.html 暗号化のお話 (2) 公開鍵暗号方式 http://x68000.startshop.co.jp/~68user/net/crypt-3.html 暗号化のお話 (3) 署名 http://x68000.startshop.co.jp/~68user/net/crypt-5.html 暗号化のお話 (5) まとめ を追加しました。 |
>>3492 68user 安易な回答をしてしまい申し訳ありませんでした。 利用規約を読ませていただきましたので、改めて回答させてください。 御指摘頂いた、curs_set(0)使用することで、dtterm上でカーソルの消去ができました。 また、printfの方法でも可能でした。 ありがとうございました |
>3492 すみません カンマが余分でした。 ありがとうございます。 |
HP-UXでのawkについて質問なのですが、 awkを使用してファイルのENDを判断できるのですか。 例えば、 cat date.txt aaa aaa bbb aaa bbb ccc 111 111 222 111 222 3333 とあった場合、 ------------------------ #/bin/sh awk ' function sub() { } getline ; 処理省略 { if (NF == 0) next ; if (NF >= 1) sub() ; ※ }' data.txt ---------------------- ※の場所でファイルのENDか判断したいのですができるのでしょうか。 |
>>3496 ブラウン ファイルのENDというのが最後の行の事なのか EOFの事なのか不明ですが、最終行であれば以下のように。 ちなみに環境はSolarisです。 ------ #!/bin/sh max_line=`wc -l $1 | awk '{ print $1 }'` awk '{ print ; if ( NR == max_line ) printf "END\n" }' max_line=$max_line $1 ------ 行数を取得する為だけにawk使うのはどうかと思いますが。 |
はじめましてです。C言語を勉強しているものです。 質問なんですが、ネットワークプログラミングで チャットを使ったゲームみたいなものを作りたいなと思っておりまして、 具体的にチャットではサーバーがクライアント全員にメッセージを送る 形になりますが、このゲームではクライアントが メッセージを送る人を選ぶことができるようにしたいのです。 たとえば会話しているのは5人いるけどそのうち3人に送ろうという 感じです。クライアント側で、全ユーザーの名前が表示され その中から送る人を選ぶみたいなかんじのゲームなんですが。 チャットにおいて選んだユーザーにだけメッセージを送るというのは 一体どうすれば可能なのですか? |
>>3497 zsh ありがとうございます。 説明不足ですみません。 ファイルのENDというのは、最終行ではなく、EOFのことです。 また、行数を取得するためにawkを使用していません。 awkを使用して、ファイルから1レコードづつよみこみ条件 毎に処理を行い、EOFだったら終了と考えていたのですが。 |
>>3499 ブラウン 取得したいのがEOFだとすると getlineの戻り値見るくらいしか思いつきません。 普通にENDに記述じゃダメですか? 或いは行数+フィールド番号でファイルの最後をチェックするとか。 >また、行数を取得するためにawkを使用していません。 すみません、行数を取得するためだけにawkを使うのはどうか というのは自分に対して言ったものです。 |
あけましておめでとうございます。 朝早くから失礼いたします。 このページは、EmacsLipsでネットワークプログラミングについて ぐぐっていたら、たどり着きました。 早速一つ質問させてください。 telnetでウェブサーバからファイルを取ってこようとしたところ、 GET /hoge.rdf HTTP/1.0 で、404になってしまいます。ブラウザやwgetだと取ってこれます。 こういう場合は、どのようにすればいいのでしょうか? # あと、私事で恐縮なのですが、SEGA BBSのログを発見したので、 # ためしに名前を入れてみたらおもいっきりヒットしました。(^_^;) # いやー懐かしい。とにかく懐かしいです。(;_;)ホロホロ # ちなみに、SEGA BBSのトップにあるsagabitoへのリンクって #「くにおにく」さんのページですよね? # 当時、「くにおにく」さんに大変世話になった記憶があります。 # 無事で過ごされているようでしたらなによりです。 # 以上、私事で失礼しました。 |
>>3501 けんおお すみません。自己解決しました。 GET /hoge.rdf HTTP/1.1 Host:hoge.jp Connection:close でいけました。 最近は、HTTP/1.0ではファイルを取ってこれなくなったんでしょうか? それでは、失礼します。 |
はじめまして。 検索辿ってこちらを拝見させていただきました。 早速質問させていただきたいのですが、 SunのUltra10 SPARKマシンで、SunOSのデスクトップに ファイルを配置するためにデスクトップの絶対パスを調べたいのですが、 Windowsのデスクトップのようにショートカットの絶対パスを辿ろうと しても一向に見つかりません。 もしかしてSunOSのデスクトップ(ワークステーション?)上のショートカットは実体のない参照(リンク)でしかなくて、デスクトップの絶対パスなんてものは存在しない(ファイルを置くことはできない)のでしょうか。 よろしくご教示お願いします。 |
>>3498 ポッしブル > チャットにおいて選んだユーザーにだけメッセージを送るというのは > 一体どうすれば可能なのですか? 名前と IP アドレスの一覧のテーブルを内部に持っておいて、選択 された名前から対応する IP アドレスを得て、その IP アドレス宛に メッセージを送信すれば可能でしょう。 要は、そういう動作をするように、あなたがプログラムを組まなく てはならないということです。 >>3501 けんおお >>3502 けんおお GET /hoge.rdf HTTP/1.0 が 404 not found なのは、 バーチャルホストな web サーバだったからでしょう。 http://x68000.startshop.co.jp/~68user/net/http-4.html さらなる改善点・バーチャルホストに対応 を読んでください。 HTTP/1.1 で OK だったのは、HTTP/1.1 だと Host ヘッダが 必須なため、結果的にバーチャルホストに対してホスト名を 提示することができたからだと思われます。 > # ちなみに、SEGA BBSのトップにあるsagabitoへのリンクって > #「くにおにく」さんのページですよね? そうです。でも今は公開されていないようですね。1年ほど前に BBS があることは確認しましたが、今は見つけられません。 >>3503 ShinoP CDE ですか? CDE をまともに使ったことはありませんが、 Solaris2.6+CDE 環境で試してみると、 ~/.dt/Desktop/.!dtdesktop ~/.dt/sessions/current/.!dtdesktop などのファイルに、リンク先のフルパスが保存されているような 気がします。 |
>>3504 68user いえ、リンク先のフルパスが知りたいのではなく、目的は 「デスクトップ」自体の絶対パスを知りたい、ということです。 少々説明が足りませんでした。 その手段としてWindowsと同じ感覚でショートカットのリンク先ではなく ショートカット自身の絶対パス (Windows2000ならば "C:\Documents and Settings\administrator\デスクトップ" で表されるような) を調べようとしたのですが、 どうにも見つかりません。 これは現在疑ってる通り、ショートカット自体には実体がなく、 したがってデスクトップに実体ファイルを配置する、 ということは不可能だということなのでしょうか。 |
>>3505 ShinoP そういうことであれば > ショートカット自体には実体がなく、したがってデスクトップに > 実体ファイルを配置する、ということは不可能 だと思います。 ただしわたしは CDE は常用しておらず、今回初めて CDE のヘルプを 見たくらいなので、間違っている可能性は多分にあります。 |
>>3506 68user CDEのデスクトップショートカットはシンボリックリンクみたいなもの、 ということのようですね。 断念して代替パスを設定する方向で進めようと思います。 ありがとうございました。 |
>>3500 zsh >取得したいのがEOFだとすると >getlineの戻り値見るくらいしか思いつきません。 >普通にENDに記述じゃダメですか? >或いは行数+フィールド番号でファイルの最後をチェックするとか getlineの戻り値ですか。 ファイルの総行数を取得して、読み込んだ行数と比較するかと思う のですが。 >或いは行数+フィールド番号でファイルの最後をチェックするとか ちなみにどうするのですか。 >普通にENDに記述じゃダメですか。 とはどういう意味ですか。 ファイルの最後にENDを付けた様式ということですか。 それでしたら無理です。 |
>>3508 ブラウン >> 普通にENDに記述じゃダメですか。 > とはどういう意味ですか。 { 行ごとの処理 } END { 終了時の処理 } という書き方ではどうか、ということでしょう。これは awk の設計思想に沿った最も自然な書き方だと思います。 それがダメなのなら、わたしも getline の戻り値を 取るのがよいと思います。 |
>>3509 68user フォローありがとうございます。 >>3508 ブラウン >ファイルの総行数を取得して、読み込んだ行数と比較するかと思う >のですが。 それは以前提示したスクリプトの方法ですが、 それだと最終行かどうかの判断であり、EOFかどうかの判断ではありません。 >>或いは行数+フィールド番号でファイルの最後をチェックするとか >ちなみにどうするのですか。 あまり意味のない方法ですので、気にしない方が良いと思います。 |
シェルについて2点教えて下さい。 1.フィールドの区切がカンマ「,」となっている行から 例えば、 山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24 山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24 から、 先頭のフィールドかあとか、 フィールドの3,4,5を取り出したいのです が、awkを使う以外にないのでしょうか。 2.シェルで、今日から10日前の日付を取得することはできるのでしょうか 環境は、HP-UX11.00、Bシェルです。 |
>>3511 ブラウン シェルについて2点教えて下さい。 1.フィールドの区切がカンマ「,」となっている行から 例えば、 山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24 山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24 から、 先頭のフィールドから順にとか、フィールドの3,4,5を取り出したい のですが、awkを使う以外にないのでしょうか。 awkを使わないで出来る方法と、awkを使ってできる方法を教えて 下さい。 2.シェルで、今日から10日前の日付や、指定した日付の10日前を 取得することはできるのでしょうか 環境は、HP-UX11.00、Bシェルです。 |
>>3511 ブラウン 質問したら必ず結果を書いてください。 http://x68000.startshop.co.jp/~68user/cgi-bin/wwwboard.cgi?howtouse |
賢いやり方か、上手いやり方か分からないが こうすればできる。 -------------------------------------------- #!/bin/sh back_to_day() { case $MM in 0) MM=12 MAX=31 ;; 1|3|5|7|8|10) MAX=31 ;; 4|6|9|11) MAX=30 ;; 2) if [ `expr $YYYY % 4` -eq 0 ]; then MAX=29 else MAX=28 fi ;; esac } YYYY=`echo $1 | cut -c1-4` MM=`echo $1 | cut -c5-6` DD=`echo $1 | cut -c7-` DD=$((DD-7)) if [ ${DD} -le 0 ] ; then MM=$((MM-1)) if [ ${MM} -eq 0 ] ; then YYYY=$((YYYY-1)) back_to_day DD=$((DD*-1)) DD=$((MAX-DD)) fi fi printf "%d%02d%02d\n" $YYYY $MM $DD exit 0 |
>>3512 ブラウン 区切り文字がカンマで、awkを使用しない場合。 ------ $ cat data.txt 山田 太郎,ヤマタ゛ タロウ,Yamda Taro,18,1760/12/24 山田 花子,ヤマタ゛ ハナコ,Yamda HANAKO,18,1760/12/24 $ cat sam1.sh #!/bin/sh OIFS="$IFS" i=0 while read line ; do IFS="," i=`expr $i + 1` set -- $line j=0 while [ $# -gt 0 ] ; do j=`expr $j + 1` echo "$i - $j : $1" shift done IFS="$OIFS" done < data.txt $ sh sam1.sh 1 - 1 : 山田 太郎 1 - 2 : ヤマタ゛ タロウ 1 - 3 : Yamda Taro 1 - 4 : 18 1 - 5 : 1760/12/24 2 - 1 : 山田 花子 2 - 2 : ヤマタ゛ ハナコ 2 - 3 : Yamda HANAKO 2 - 4 : 18 2 - 5 : 1760/12/24 ------ 指定された日付の10日前の日付を取得するのは面倒そうなのでパス。 単純に今日から10日前を取得する方法については、 下(↓)を良く読みましょう。 http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date |
>>3515 zsh ありがとうございます。 行の編集についてはできました。 しかし、日付の操作については、 http://x68000.startshop.co.jp/~68user/unix/prgmemo.html#date を参考にしてやって見ました。 タイムゾーンを設定して、URLの例にあるのでは、上手くいったのですが % env TZ=JST+15 date (1日前の時刻を表示) % env TZ=JST-33 date (1日後の時刻を表示) 2日前では、 -9+48=39 % env TZ=JST+39 date は上手く行きませんでした。 環境は、HP-UX11.00、Bシェルです。 |
初めて投稿いたします。 UNIXのコマンドで、split というファイル分割コマンドがありますが、分割後のファイルをWindowsで結合させるための、MS-DOS コマンド、あるいは、フリーのソフトを知らないでしょうか。 |
>>3517 せんべい > 分割後のファイルをWindowsで結合させるための、MS-DOS コマンド copy a.txt+b.txt+c.txt out.txt でできたような気がします。 > あるいは、フリーのソフトを知らないでしょうか。 http://www.so-net.ne.jp/download/win/util/file/spl_mrg/ など。 |
はじめまして,unix初心者です,教えて下さい。 異常終了させてしまい,1つのハードがmountされません。fsckを使って修復しようとしたのですが,エラーメッセージによると部分的なセクターが破損しているため修復できないとの内容でした。破損している箇所だけのフォーマットは可能なのでしょうか?もしあれば方法を教えて下さい。お願い致します。 |
>>3519 初心者 詳しくないのでなんともいえませんが (これまで fsck でこけた 経験がないので)、少なくとも以下の情報は必要でしょう。 - OS 名とバージョン - ファイルシステム名 (ufs, ext2 など) - 正確なエラーメッセージ (エラーメッセージで検索できるよう原文を提示する) 検索のキーワードとしては「スーパーブロック」ですかねぇ。 |
unixのfindコマンドについて教えて下さい。 findを使用するとファイルの検索ができますが、 自分がいるカレントのみを検索し、その配下にあるディレクトリ を検索したくないのですが、どうすれば可能でしょうか。 例えば、 現在位置 cd /tmp/tool/bin /tmp/tool/bin 入るとします。 find .. -name ".log" -type f -print と行うと、tool及び、bin配下やよのたのディレクトリを検索 find .. ! -depth -name "*.log" -print と行うと検索しない。 1つもだった、ところのファイルのみを検索したい |
>>3521 yabu -maxdepth 1 でいけるでしょうが、-maxdepth に対応 していない find もあります。 単にファイル名でマッチさせたいだけあれば、 % echo *.log でもいいでしょう。 |
Sunでaliasの設定でつまづいてます。。(alias rm="rm -i") シェルはshなので.profileに記述しましたが効きません。 ネット検索しましたがshでのalias設定なしとありました。 shでのalias設定はどう行えばいいでしょうか? ご教授お願いします |
>>3522 68user >-maxdepth 1 でいけるでしょうが、-maxdepth に対応 >していない find もあります。 HP-UX、SunOSともに対応していませんでした。 >単にファイル名でマッチさせたいだけあれば、 > % echo *.log >でもいいでしょう。 でやらせていただきました。 |
IE などブラウザ上のボタンなどの操作を外部からしたいのですがしたいのですが、可能でしょうか? 例、VC++ のソフトで、Yahoo の検索を検索キーワードを入力や検索ボタンを押したい。 例、証券会社のHPで定期的に株価更新のため株価ボタンを押す。 などです。 ここの主旨から外れるかも知れませんが、宜しくお願いします。 |
>>3523 moko まずは $ . $HOME/.profile としましょう。それで alias が効かないなら .profile の書き方が悪い。alias が効くなら .profile が読み込まれ ていないか、.profile 読み込み後に unalias されている んでしょう。 >>3525 external 詳しいところは知らないので、キーワードだけ並べておきます。 COM (Component Object Model) OLE (Object Linking and Embedding) ActiveX |
初歩的な質問ですが、Solarisのhostsについて教えて下さい。 他の端末と通信する為には/etc/inet/hostsにIPを書くと思っています。 でも、/etc/hostsにも同じhostsがあり、両方直しています。 /etc/hostsには/etc/inet/hostsと違った意味があるのでしょうか。 宜しくお願いします。 |
>>3527 yuki http://www.freebsd.org/cgi/man.cgi?query=hosts&manpath=SunOS+5.9 NOTES /etc/inet/hosts is the official SVR4 name of the hosts file. The symbolic link /etc/hosts exists for BSD compatibility. というわけで、同じでしょう。 |
Volumeの初期化に関して,どうのような操作をすれば良いか教えてください。digital unix 4.0 |
crontabを実行した時間がわかるようにするためにはどのような書き方をしたらよいかわかりません。教えていただけないでしょうか。 よろしくお願いいたします。 |
こんばんは。 Perlのほうが文字列処理などが書きやすい、でもCのほうが速度が速かったりするなどの理由から、XSを使用して二つの言語を合わせてみようと思いました。 そこで、CのヘッダをXSにかけてからPerlを実行したのですが、 "Your vendor has not defined Prime macro Prime" というエラーが出てしまいます。 XSによって生成されたのはPrimeというディレクトリで、その中にあるPrime.pmに、Perlから第一引数として数字を渡すものでした。 Perlのほうからは、 Prime::Prime($ARGV[0]) として呼び出しましたが、何がいけなかったのか、教えていただきたく思います。 よろしくお願いします。 |
AIXに付いて教えて! AIXマシンでは、gettimeofday()関数が使えない! よくよく調べると、コンパイル時、XOPEN_SOURCEを指定している為 である事が判ったが、XOPEN_SOURCEを外す訳にもいかず困ってます。 gettimeofday()関数と同じ機能で、置き換えられる関数ってないでしょうか? |
>>3529 kai Volume ってなんですか? 音量のことですか? であれば わかりません (ioctl とか使うんですかね)。 >>3530 momo 1. cron から実行するスクリプト内でファイルに時刻を記録する 2. * * * * * date>>/foo/bar/log; command とする。 3. /var/cron/logs などにあるログを見る。 >>3531 ken XS はよく知りませんが、perl のバージョンも、何をどうやったの かも書かれていないので何ともいえません。 下記は perl 5.005_03 の例ですが、まずはここからでしょう。 % h2xs -A -n Prime % cd Prime int Prime(num) int num; CODE: RETVAL = 2*num; OUTPUT: RETVAL % perl Makefile.pl % make hoge.pl を作成 % cat hoge.pl use ExtUtils::testlib; use Prime; print Prime::Prime(123),"\n"; % perl hoge.pl 246 >>3532 Hiro なぜ XOPEN_SOURCE が指定されていると gettimeofday が使えない のかよくわかりませんが、古い形のプロトタイプ宣言が〜とかいう 話ではないかと思うので、mygettimeofday.c を作って、 #include <sys/time.h> int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE int mygettimeofday (struct timeval *Tp, void *Tzp){ return gettimeofday(Tp, Tzp); } とするとか。 |
>>3533 68user > int gettimeofday (struct timeval *, void *) #undef XOPEN_SOURCE int gettimeofday (struct timeval *, void *); #undef XOPEN_SOURCE のタイプミスです。 |
さきほどXSのことを質問させていただいたのですが、なんとか解決しました(汗 どうやら、根本的に思い違いをしていたのが原因のようで...。 わざわざのご回答、ありがとうございます。 もう少しぼくが早く解決して書き込んでいれば良かったのですけどね。 |
>>3528 68user The symbolic linkでしたか。 ぜんぜん気がつきませんでした。有難うございました。 |
はじめまして。タカと申します。 Perl関連について御教授ください。 Windows端末にてActivePerl-5.8.2.808-MSWin32-x86をインストールし Perlを作成しております。 そこで、PerlでExcelファイルに出力するプログラムを 作ろうと思っております。 その為、Spreadsheet-WriteExcel-0.42モジュールを、 ダウンロードしました。 本モジュールはWindowsでも機能すると表示されているのですが、 どうやって使用すればいいのか分かりません。 Spreadsheet::WriteExcel version 0.33(日本語訳)の HPを見ているのですが、私の知識不足で不明です。 もしご存知であれば御教授いただきたいのですが、 よろしくお願いいたします。 |
>>3537 タカ http://member.nifty.ne.jp/hippo2000/perltips/module_install.htm によると、ActivePerl の場合は PPM なるものを使うそうです。 # わたしは使ったことはありません。 |
ありがとうございました。 ちょっと試してみます。 |
クッキーに関する↓の冒頭でRFCに盛り込まれていないとありますが、 どうも2109で触れているそうですよ。 http://x68000.startshop.co.jp/~68user/webcgi/cookie.html 参考にさせていただいたサイト: http://www.nonki.net/technical/report/http-cookie/ http://www.ietf.org/rfc/rfc2109.txt |
>>3540 has ありがとうございます。とりあえずそこだけ直しておきます。 > どうも2109で触れているそうですよ。 RFC 2109 は obsolete で、今は RFC 2965 です。 http://www.studyinghttp.net/rfc_ja/rfc2965_ja.html でもまぁ、Set-Cookie2 は全然流行っていませんけどね。 |
はじめまして 右院堂 と申します。 いきなり質問で エゴ丸出しで申し訳ないですが ASP には Response.Buffer = True というのがあって、 ある html の form から 呼ばれた asp が 呼び元へ 自分の form を Response.Redirect で 返す時、Response.Redirect が実行されるまで HTMLヘッダーの出力を引き伸ばすことが出来ます。 これをやらないと HTMLヘッダーが 自分自身として Redirectされる前に出力されてしまうからです。 Perl では これに相当する記述はあるんでしょうか。 |
>>3542 右院堂 ASP はよく知りませんが、素の perl を使う場合は (そういう機能を 持つモジュールを使わない限りは) 相当する機能はないです (そういう 機能を持つモジュールの存在は知りません)。 $buf .= "出力文字列1"; $buf .= "出力文字列2"; ... print $buf; や、 open(STDOUT, "> /foo/bar/tmp.$$"); print "出力文字列1"; print "出力文字列2"; ... close(STDOUT); open(IN, "/foo/bar/tmp.$$"); print <IN>; close(IN); などと自分でバッファに保存し、最終的に出力するのが よいと思われます。 |
ポートに関しては初心者です。 すいませんが、ポート番号について教えて下さい。 Solarisを使用していますが、ポート番号は任意の決め事ですか? 現在使用しているSolarisは下記設定になっているようです。 WEBサーバはポート=80、FTP=20、プリントサーバ=9100 これらは、標準で決まっているのでしょうか? また、相手側を意識せず勝手にきめてもよいのでしょうか? 他に、ポートの設定をみる方法とかありましたらご教授下さい。 宜しくお願いします。 |
>>3544 yuki > Solarisを使用していますが、ポート番号は任意の決め事ですか? おおまかな指針はありますが、任意です。 > WEBサーバはポート=80、FTP=20、プリントサーバ=9100 デフォルトではそのような設定になっていますが、ほとんどの 場合は (サーバソフトウェアが対応していれば) ポートは変更 できるでしょう。ポート変更方法は各サーバソフトウェアの マニュアルに書いてあるはずです。 > また、相手側を意識せず勝手にきめてもよいのでしょうか? 標準的でないポートを使用するよう設定変更してもいいですが、 利用者に通知しないと使うことができません。 例えば web サーバであれば http://www.example.co.jp/ ではなく http://www.example.co.jp:8080/ にアクセスするようアナウンスしないといけませんし、プリンタで あれば自組織の環境設定手順書に 「プリンタの設定時に、ポート xxxx を使用するように設定してください」 と書いておく必要がある、といった感じです。 というわけで、標準的でないポートを使うことはできますが、 なにかとめんどくさい、という感じです。また、外部向けの サービスであれば、ファイアウォールで弾かれたりする危険性は 高まりますね。 |
irix使ってますが、ls -lでfileの詳細を見ると、拡張子の後に*が表示されてます。これはなにを意味するのでしょうか? |
>>3546 yosi 実行ファイルと思われます。ls の -F オプションの説明を読んでください。 |
UNIXのCシェル2点につてい教えて下さい。 1点目 以下の、a.txtファイルから第1フィールドの値を 先頭の'0' or "> 0 "のゴミを取って、10桁(先頭0なし)だけを また、第1フィールドの文末の半角スペースや’|’を取ってとり だしたいのですが、第1フィールはawkを使って取得できますが、 その後に編集ができません。たしか、sedの何かを使えば数字のみ だけを取り出せたと思うのですが、浮かんできません。 教えていただけないでしょうか。 cat a.txt | awk -F"," '{ print $1 }' | sed a.txt 09012345678,aaaa 07055593850,bbbb 9098765432,cccc 7012345678,ddddd > 07012345679 | ,eeeee 07012345670 ,ffff 出力結果 9012345678 7055593850 9098765432 7012345678 7012345679 7012345670 2点目 Cシェルで定義ファイルに設定してある項目を読み込むには どうしたらよいのですか。 定義ファイル MN=ABCDEFG FILE=/work/temp.txt set PARM1 = `grep ^MN 定義ファイル| awk -F"=" '{ print $1 }'` set PARM2 = `grep ^FILE 定義ファイル| awk -F"=" '{ print $1 }'` と繰り返すかないのでしょうか。 また、何も、タブとか半角スペースから始まっている場合もあると思うの ですが、どうすればよいのですか。 |
>>3548 つくも 1点目はawkのみで可能。 (古いawkではダメとかあるかも知れないけど。) ------ awk 'BEGIN { FS = "," ; } { i = match($1,"[1-9]"); print substr($1,i,10); }' a.txt ------ 2点目は、こんな事が許されるのか判りませんが ------ eval `awk 'BEGIN{ FS="=" }{ if(NF != 0) print "set " $1 " " $2}' param.txt` ------ 大人しく定義ファイルで「set A=val」と書いて sourceすべきだと思いますが・・・ |