>>4918 べた /usr/local/bin/iconv は GNU の libconv 同梱の iconv コマンド、 /usr/bin/iconv は Solaris 標準の iconv コマンドではないかと 思います。 GNU 版であれば、--version オプションを使うことで % iconv --version iconv (GNU libc) 2.3.4 Copyright (C) 2005 Free Software Foundation, Inc. (略) といった表示が得られるかと思います。 以下は Solaris 版と GNU 版の違いであったとして、という前提ですが、 機能差で選ぶなら↓を比較 (昔の Solaris 版 iconv は、不正なバイト列が あった場合即終了だった気がするのですが、現在はスキップという選択肢も 選べるんですかね? であればそれほど機能差はないかも) http://docs.sun.com/app/docs/doc/819-1210/6n3j74jpk?a=view http://www.gnu.org/software/libiconv/documentation/libiconv/iconv.1.html エンコーディングの多さで選ぶなら、/usr/local/bin/iconv -l と /usr/lib/iconv/iconv_data を比較。特に CP932 や UTF-8 などが絡む 場合は、手持ちの全ファイルを変換して結果を調べるくらいはやった 方がよいかと思います。 後は GNU が好きか、Solaris の世界で固めるのが好きか、でしょうか。 |
>>4919 べた expr や cut でもできますよ。 (cut の場合は @ が付きませんが。) $ expr $email : '\(.*\)@.*' $ expr $email : '.*\(@.*\)$' $ echo $email | cut -d '@' -f 1 $ echo $email | cut -d '@' -f 2 >>4918 べた Solaris には標準で /usr/local というディレクトリがないので、 68user さんの仰るとおりだと思います。 |
>>4921 zsh ありがとうございます。 exprやcutでの使い方ありがとうございます。 勉強になります。 |
WindowsXP IE6.0 SP2 の別の端末から書き込みを おこなったら以下のエラー画面が表示されました。 何かインストールされていないものがあるのでしょうか。 エラー : 内部エラーが起こりました。 http://x68000.q-e-d.net/%7E68user/cgi-bin/wwwboard.cgi の実行ができませんで した。 おそらくCGIプログラムの不具合が原因です。 もし、こちらのファイル設定ミス・リンクミス・CGI の不具合などが原因であった場 合は早急に修正します。 の画面が表示されます。 |
>>4918 べた >>4921 zsh 説明ありがとうございます。 それでなのですが、ステータスが返ってくるということで、 「/usr/local/bin/iconv」を使っています。 Bシェルで実行しています。 iconvコマンドをパイプでつないで、連続で実行しています。 /usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt 1回目のiconv(パイプの左側のiconv)がエラーとなったとき、 ステータスがエラーで返ってきません。 エラーを判断したいのですが、どのようにしたらエラーと判断 できるでしょうか。 /usr/local/bin/iconv -f SJIS -t UTF8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF-16 > file_utf.txt echo $? iconv: conversion to UTF8 unsupported 0 ”0”が返却。 /usr/local/bin/iconv -f SJIS -t UTF-8 file_sjis.txt | /usr/local/bin/iconv -f UTF-8 -t UTF16 > file_utf.txt echo $? iconv: conversion to UTF16 unsupported 1 ”1”が返却。 |
>>4923 べた ありがとうございます。 $ expr $email : '\(.*\)@.*' $ expr $email : '.*\(@.*\)$' $ echo $email | cut -d '@' -f 1 $ echo $email | cut -d '@' -f 2 どれでも、取り出せました。 |
>>4925 べた > 1回目のiconv(パイプの左側のiconv)がエラーとなったとき、 > ステータスがエラーで返ってきません。 > エラーを判断したいのですが、どのようにしたらエラーと判断 > できるでしょうか。 bash なら PIPESTATUS を使えばよいですが、sh であれば 終了ステータスは取得できないと思います。しょぼいですが、 パイプを使うのをやめるのがよいかと思います。 >>4924 べた > WindowsXP IE6.0 SP2 の別の端末から書き込みを > おこなったら以下のエラー画面が表示されました。 IP アドレスや発言内容などから SPAM と判定されたのかもしれません。 特に判定精度の高いものではないので、頻発するようならご連絡ください。 |
>>4927 68user ありがとうございます。 sh できないんですね。 出力結果がなければ、出力結果をパイプで渡さなければ 「&&」でいけるのでないかと覆いますが。 パイプを使わず個々に行います。 |
Solaris8 なのですが、「/var/log/syslog」に、 TCPコネクションのログを出力させたいのです。 telnet、ftpなど、接続したログを出力したいの です。 どのようにすればよいのでしょうか。 「/etc/syslog.conf」には、以下の様な記述をしています。 user.notice /var/log/syslog syslogのデーモンも再起動したのですが、出力されません。 |
>>4829 68user ftpのログを取得するAIXの場合の例です。 #vi /etc/inetd.conf (ftpのエントリーで最後に「-l」または「-d」オプションを追加) ftp .... /usr/sbin/ftpd ftpd -l または ftpd -d (転送ファイル名を確認するだけであれば -l オプションの方がログが少なくて済みます) #refresh -s inetd (inetdデーモンをリフレッシュ) #vi /etc/syslog.conf (syslog設定ファイルにftpのログを取得するためのエントリを追加) daemon.info /tmp/ftpd.log (daemon.debugであればもう少し詳しい詳細が確認できます) #touch /tmp/ftpd.log (ログファイルを作成) #refresh -s syslogd (syslogデーモンを再起動) |
>>4931 バンガード ごめんなさい。 4929へのコメントでした。 |
>>4932 バンガード お礼が遅れ申し訳ありません。 ご説明ありがとうございます。 どちらにしてもデーモンの再起動(リフレッシュ)が 必要なんですね。 |
Solaris8 なのですが、シェルを実行する際、 ./シェル名としないと起動できません。 「./」で起動するにはどうしたらよいのでしょうか。 「./」で起動できるアカウントがあるので、違いを比べてみると PATHの変数が異なっていました。 PATH=./:/usr/bin・・・・・ とか PATH=・・・・/usr/bin: PATH変数の中に、「./」の設定がある。 PATH変数が「:」で終わっている。 「./」を指定しないと動かないアカウントは、両方がない状況と なっています。 どのように環境変数を設定すればよいのですか。 |
>>4934 べた > 「./」で起動するにはどうしたらよいのでしょうか。 「./」なしで起動したいということでしょうか? PATH 環境変数に ./ を含めれば可能ですが、お勧めはしません。 特定のディレクトリにスクリプトを集めて、そのディレクトリを PATH 環境変数に含める方がよいと思います。 なお、同じ名前のコマンド(スクリプト)が複数のディレクトリに 存在する場合は、PATH 環境変数で先に見つかったコマンド (左側のパスから順番に探しに行きます)が実行されます。 |
>>4934 べた PATH に . を含めない理由は以下のとおり。 ・セキュリティホールとなる。PATH=.:/bin:/usr/bin:/usr/local/bin となっていて、 cd ~foo; ls としたときに /home/foo/ls が存在したら、そのプログラムを実行 してしまう。cd /tmp; ls も同様。そのプログラムがどんな悪さをするかはわからない。 ・PATH に . を加えると、カレントディレクトリによって実行されるコマンドが異なる 可能性があるため、説明がめんどくさいし、はまりやすくなる。例えば /bin と /usr/bin に同名のコマンドがあるとして、コマンド foo をタイプしたときに、 - カレントディレクトリが /usr/bin の場合は /usr/bin/foo が実行される - カレントディレクトリが /usr/bin 以外の場合は /bin/foo が実行される というのはわかりづらい。 ・csh・tcsh・bash・zsh など、今どきなシェルを使っている場合は、 ./ からタイプした方がファイル名補完を使えるため、入力が速い。 |
>> 4935 >> 4936 返事が遅くなってすみません。 分かり易く説明ありがとうございます。 勉強になります。 |
Cシェルでのリダイレクションについてなのですが コマンドの実行結果で、標準エラー出力を捨てて、標準出力 だけを見たいのですがどうすればよいのですか。 cat file.txt >& /dev/null では、標準出力、標準エラー共に捨てられますが、 標準エラーを捨てて、標準出力を表示したい。 cat file.txt 2 >& /dev/null cat file.txt >2& /dev/null cat file.txt >& 2 /dev/null cat file.txt > /dev/tty >2 /dev/null cat file.txt > /dev/tty >& /dev/null とやってみたのですが、どれも上手くいきません。 どうすればよいのでしょうか。 環境は、 Solaris8 Cシェル です。 |
>>4942 べた tty 宛でよいなら、サブシェルを使って ( cat file.txt > /dev/tty ) >& /dev/null です。 |
>> 4944 ありがとうございます。 > tty 宛でよいなら、サブシェルを使って > ( cat file.txt > /dev/tty ) >& /dev/null > です。 出来ました。 tty 宛でよいなら、サブシェルを使って tty を使わない方法もあるのですか。あるのでした教えてください。 サブシェルとは。 「( command )」とはどのよな使い方でしょうか。 良い案が思い浮かばなかったので、「cat file.txt > /dev/tty」で 表示ができたので、 /dev/tty を使えば上手くできるのではないかと。 |
>>4944 べた tty を使わないなら、 ( cat file.txt > out.txt ) >& /dev/null などとファイルに保存する。 あるいは mknod や mkfifo で名前付きパイプを作ってそこに 流すなど (さすがに標準エラー出力を捨てるためにここまで やるのはバカバカしいですが)。 mkfifo out cat out & ( cat file.txt > out ) >& /dev/null あるいは sh -c "ls cat file.txt 2>/dev/null" などと sh で逃げる手もあります。 csh でやるなら、これ以外の方法はおそらくないです。 > サブシェルとは。 > 「( command )」とはどのよな使い方でしょうか。 こちらをどうぞ。 http://x68000.q-e-d.net/~68user/unix/pickup?%A5%B5%A5%D6%A5%B7%A5%A7%A5%EB |
>> 4945 ご説明ありがとうございます。 Windows XPの別端末で書き込みをしたら 「エラー : 内部エラーが起こりました。」 の画面が表示されました。 何かあるのでしょうか。 |
こんにちは.linuxを使い始めたものです. パイプに関する質問です.環境はVine Linux のbashです. あるファイル名(ここではtestfile)のものを検索して, さらにその中身に"test"という文字列を含むかどうかを 知りたいと思っています. 対象のファイルがひとつとは限りません.例えば, ........... ../Data1/testfile ⇒(中身)This is test file. ........... ../Data2/testfile ⇒ (中身) This is hoge hoge. といった感じで同じ名前のファイルが別のディレクトリにあります. cat,find, grepを組み合わせれば出来そうな気はしているのですが, findしてリスト表示されたファイル名を引数としてcatコマンドに 渡すことができません. 自分なりにいろいろ検索しましたが,よくわかりませんでした.. よろしくご教授ください. |
>>4947 素人 親ディレクトリ以下の testfile というファイル名のファイル中に test という文字列があるものをリストアップ、であれば % find ../ -name testfile | xargs grep -l test でしょうか。それを cat するなら % find ../ -name testfile | xargs grep -l test | xargs cat ですかね。 |
>>4948 68user できました!答えはxargsでしたか. 勉強不足で恐縮です.ありがとうございました. |
RSA1のプログラムを実行するにあったってエラーが多くでます。これのヘッダファイルはどこにあるのでしょうか。 |
>>4950 佐藤丈師 OpenSSL に同梱されていますので、OpenSSL をインストール済みであれば /usr/include/openssl や /usr/local/openssl/include などにあるはずです。 コンパイル時に -I /usr/include/openssl などのオプションを付加してください。 |
初めて投稿します。 全くの初心者ですが、次のことをお尋ねします。 Debian4.0ですが、デスクトップにアイコンを作成し、クリックすると プログラムを起動するようにしたいのですがどのようにすればいいの でしょうか。 #su - abc ’abcでログインし、「sh /usr/lib/scripts/claim/ORC_CLAIM_SERVER.sh 5001 /var/tmp」 ktermに記述などお尋ねします。 |
>>4952 kawasaki やり方はインストールしたデスクトップ環境 (GNOME とか KDE とか) によると思います。 が、お使いのデスクトップ環境をお教えいただいたとしても、ここ数年は UNIX 系 デスクトップ環境をいじっていないので、わたしはさっぱりわかりません。 |
初めまして。 ちょっと気になったので言わせて下さい。 UNIXの部屋 コマンド検索: Machでの説明で、 発音は、普通なら [まっは] が正しいと思うが、アメリカ人は "ch" の発音ができないらしくて [まーく] [まっく] といっている (発音できないような名前を付けるなと言いたい)。 とありますが、発音できないんじゃなくて、そういうスペルだと、 英語的には、マークって呼ぶだけです。hの2つ前は、aつまりエイって発音し、 cは、基本的には、ックって発音になり、 何も考えずにつなげて読むと、マークって読みます。 で、でもなんで、マッハが正しいかと言うと、 これは、ヨーロッパ系の言語の多くが、 machって書いてまっはって読むからです。 発音できないわけじゃないですよ^^; |
>>4954 uccこーひー ご指摘ありがとうございます。が、正直なところを申しますと、学がないので 真偽のほどが判断できません。よって、該当コンテンツより、 >>4954 uccこーひー の発言にリンクを張らせていただきますので、あとはお読みいただいた方に ご判断いただくことでご了承ください。 |
いつも便利に参照しています。 lsコマンドの紹介ページ(http://x68000.q-e-d.net/~68user/unix/pickup?ls)で 「man Solaris10 ls(1)」のリンク先が間違えているのに気がついたのでご連絡です。 正しくは、 「http://docs.sun.com/app/docs/doc/819-1210/ls-1?l=ja&a=view&q=ls」かな? |
>>4957 たけ > 「man Solaris10 ls(1)」のリンク先が間違えているのに気がついたのでご連絡です。 ありがとうございます。Sun のページはたまに URL が変わるんですよね…。 最新情報で更新しておきました。 NetBSD の manpage へのリンクも表示されなくなっていますが、そのうち直します。 |
SE募集の件で書き込みさせていただきました。 大変興味がありますので、一度詳細を教えていただけないでしょうか。 ご連絡をお待ちしています。 |
ありがとうございます。メールを送ります。 |
Perlで、前日のAM9時以降に作成されたファイルを 取得したいのですが、どのようにPerlを書けばよい のでしょうか。 Perlのシェルスクリプトを起動する前日のAM9以降 から、実行日までの間に作成されたファイルを取得 したいのです。 実行日の前日の9時というのは以下の方法で取得できる のですが、取得した日付とファイル作成日付を比較し、 対象か否かを判断して、必要なものだけを取得する 方法が分かりません。 どのよに書けばよいのでしょうか。 「実行日の前日の9時」は、 -------------------------------- #!/usr/local/bin/perl $tm = time - (24 * 60 * 60 * 1); ($sec, $min, $hour, $day, $mon, $year) = (localtime($tm))[0..5]; $now = sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$day,$hour,$min,$sec); print $now, "\n"; -------------------------------- #!/usr/local/bin/perl use POSIX 'strftime'; $tm = time - (24 * 60 * 60 * 1); my $now = strftime "%Y/%m/%d %H:%M:%S", localtime($tm); print $now, "\n"; |
>> 4974 環境を書き忘れました。 環境は、 Solaris8 Perl v5.8.5 |
>>4974 べた >>4975 べた Solaris なら適当なファイルを作って、touch コマンドでタイムスタンプを 前日 08:59:59 にしておいて、find . -newer foo とするのが一番簡単かと 思います。 FreeBSD なら find -mtime -99h とか、Linux なら find -mmin -9999 とか できますが (99 や 9999 は計算して求める)、結局は -newer の方が簡単な 気がします。 モジュール使うなら File::Find http://perldoc.perl.org/File/Find.html File::Find::Rule http://search.cpan.org/~rclamp/File-Find-Rule-0.28/lib/File/Find/Rule.pm あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと いけないように見えますので、イマイチですね。 |
>>4976 68user ありがとうございます。 また、返事が遅くなって申し訳ありません。 > find . -newer foo ですか。 シェルで、findの結果を取得することも考えました。 > あたりかと思いますが、いずれも前日9時と比較する部分は手で書かないと > いけないように見えますので、イマイチですね。 Perlを使おうとしていたので、手で書かなくてはいけないと思っていました この部分の良い方法が実現できなくて。 環境上、教えて頂いたモジュールも入れることができません。 |
>>4977 べた find . -newer foo の方法を書いておきます。find を使わないなら、 昨日9時の日時 (20090323090000) を Time::Local で epoch time に 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。 ------ my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time()-60*60*24); my $timestamp = sprintf("%04d%02d%02d%02d%02d.%02d", $year+1900, $mon+1, $mday, 9, 0, 0); my $yeasterday_9am_file = "foo.txt"; system("touch -t $timestamp $yeasterday_9am_file"); open(IN, "find . -type f -newer $yeasterday_9am_file |"); while (<IN>){ chomp; print "$_\n"; } |
>> 4978 ありがとうございます。 教えていただいた方法ですと、前日9時のタイムスタンプの 取得をPerlでやればあとは、シェルスクリプトでもできます ね。 実のところ、findを使わない、Perlでの記述、遣り方を教えて ほしいのですが。 |
>>4978 68user > find を使わないなら、 > 昨日9時の日時 (20090323090000) を Time::Local で epoch time に > 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう。 Time::Local で epoch time に直しての「epoch time」とは なんでしょうか。 |
linuxのCでグラフィックの勉強がしたくてX-Windowまで辿り着いたのはよかったんですが、 ここ↓のソースを実行させようとしても何故かエラーが出てしまいます。 http://x68000.q-e-d.net/~68user/xprogram/xlib-4.html 一応類似の記事がないかどうか調べて見ましたが、 No.8552が近いと思いましたが全然分かりませんでした。 ちゃんとusr/include/X11ファイルに Xlib.hとXutil.hはありますし、 コンパイルオプションも活用してみました…… Xlib.hとXutil.hの意味も分からなくて困窮中です…… コマンドラインは、gcc -o xlib-4-1 xlib-4-1.c -I /usr/include/X11 -L /usr/include/X11 エラーは以下の文です /tmp/cc2pF4g1.o: In function `main': xlib-4-1.c:(.text+0x9f): undefined reference to `XOpenDisplay' xlib-4-1.c:(.text+0x149): undefined reference to `XCreateSimpleWindow' xlib-4-1.c:(.text+0x198): undefined reference to `XSetStandardProperties' xlib-4-1.c:(.text+0x1c0): undefined reference to `XCreateGC' xlib-4-1.c:(.text+0x1e8): undefined reference to `XSetBackground' xlib-4-1.c:(.text+0x20a): undefined reference to `XSetForeground' xlib-4-1.c:(.text+0x232): undefined reference to `XCreateGC' xlib-4-1.c:(.text+0x25a): undefined reference to `XSetBackground' xlib-4-1.c:(.text+0x27c): undefined reference to `XSetForeground' xlib-4-1.c:(.text+0x294): undefined reference to `XMapRaised' xlib-4-1.c:(.text+0x2ec): undefined reference to `XFillArc' xlib-4-1.c:(.text+0x344): undefined reference to `XFillArc' xlib-4-1.c:(.text+0x352): undefined reference to `XFlush' collect2: ld はステータス 1 で終了しました |
>>4982 ちびヴァル オプション -lX11 が足りていません。まずは http://x68000.q-e-d.net/~68user/xprogram/xlib-1.html からどうぞ。 |
>>4980 べた > 「epoch time」とはなんでしょうか。 http://oku.edu.mie-u.ac.jp/~okumura/php/date.php UNIX で Epoch とは,協定世界時(UTC,いわゆるグリニッジ標準時 GMT) 1970 年元旦 0 時 0 分のことです。 UNIX の内部ではこの瞬間からの秒数で 時刻を表しています。 のことです。 |
>>4983 68user 一通り実行して終了させると次の文章が出るんですが…… XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0" after 16 requests (14 known processed) with 0 events remaining. 自分で調べて、etc/X11/xorg.confというファイルにが重要であると わかったので、xorg.confに Section "ServerFlags" Option "AllowEmptyInput" "off" EndSectionを 追加しようとしていますが、普通のテキストエディタでは 「そのファイルを保存するために必要な権限がありません。入力した場所が正しいか確認して、もう一度実行してみて下さい。」 と出て保存出来ないのですが、どうすればいいでしょうか? また、コマンドプロンプトでも試して見ましたが、 E325: ATTENTION Found a swap file by the name "/etc/X11/.xorg.conf.swp" owned by: root dated: Mon Apr 6 14:37:03 2009 file name: /etc/X11/xorg.conf modified: YES user name: root host name: mikan process ID: 8021 While opening file "/etc/X11/xorg.conf" dated: Thu Mar 5 23:15:04 2009 (1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution. (2) An edit session for this file crashed. If this is the case, use ":recover" or "vim -r /etc/X11/xorg.conf" to recover the changes (see ":help recovery"). If you did this already, delete the swap file "/etc/X11/.xorg.conf.swp" to avoid this message. "/etc/X11/xorg.conf" 33 lines, 1037 characters と出てどうすればいいか迷っています |
>>4985 ちびヴァル > Found a swap file by the name "/etc/X11/.xorg.conf.swp" vim が作成したスワップファイルでしょうから、.xorg.conf.swp を 削除して、root 権限で xorg.conf を更新すればよいと思います。 |
>> 4978 > find . -newer foo の方法を書いておきます。find を使わないなら、 > 昨日9時の日時 (20090323090000) を Time::Local で epoch time に > 直しておき、stat() が返す最終更新時刻と比較すればよいでしょう の方法を教えて欲しいのですが。 |
Bシェルで、sedを使って、フルパスからディレクトリとファイル名を 分割したいのですが良い方法を教えてください。 ファイル名を取り出すことは出来たのですが、パス名を取り出すこと ができません。 また、ルート直下「/txt.csv」のような場合だと、ファイル名が取り出せ ません。結果が、「/txt.csv」となってしまいます。「txt.csv」と したいのです。 ------------------------------------ FILE=/aaa/bbb/txt.csv echo ${FILE} | sed 's/\/.*\///g' FILE=/txt.csv echo ${FILE} | sed 's/\/.*\///g' FILE=txt.csv echo ${FILE} | sed 's/\/.*\///g' 環境は、 Solaris8 Bシェル |
>>4989 べた basename・dirname コマンドを使うのはダメですかね。 |
>>4990 68user >basename・dirname コマンドを使うのはダメですかね。 も考えましたが、 出来れば、使わない方法でと |
>>4991 べた 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。 sed でやりたいならこんな感じかなぁ? - ファイル名 echo ${FILE} | sed 's/.*\///g' - パス名 echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g' |
>>4992 zsh > 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。 すみません。 > - パス名 > echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g' が、上手くいきませんでした。 パス名がとれません。フルパスが返ってきます。 /aaa/bbb/txt.csv → /aaa/bbb/txt.csv /txt.csv → /txt.csv |
>>4992 zsh > 普通に考えると、それ専用のコマンドがあるんだからそれを使うべき。 すみません。 > - パス名 > echo ${FILE} | sed 's/\(.*\/\)[\/]*/\1/g' が、上手くいきませんでした。 パス名がとれません。フルパスが返ってきます。 それと、ファイル名のみ場合は、値がなしとしたいのですが。 /aaa/bbb/txt.csv → /aaa/bbb/txt.csv /txt.csv → /txt.csv |
>>4994 べた 失礼しました。↓でどうでしょうか? echo ${FILE} | sed -n -e 's#\(.*\)/[^/]*#\1#p' |
>>4996 zsh ありがとうございます。 パス名を取り出すことができました。 ただ、以下の様に場合、上手くいきません。 「FILE=/txt.csv」の場合 「/」となりません。 ブランクというか、改行します。 「/」だけ取り出すというのは無理なのでしょうか。 「FILE=txt.csv」の場合 ブランクとなります。 正しい動きなのでしょうか。 |
nawkのユーザ定義関数について教えて下さい。 nawkで、ユーザ定義関数を呼び出して編集を行っているのですが、 ユーザ定義関数内で編集した値を、パラメータで渡した変数に設定 して返却したいのでが値が返却されません。 ユーザ定義関数内では、渡した変数に値が設定されているのですが、 関数を抜けると値が設定されていません。 どうしてなのでしょうか。 それとも、無理なのでしょうか。 パラメータで渡した変数に設定して返すことができるのでしょうか。 環境 OS:Solairs8 シェル:Bシェル(sh) -------------------------------------------------------------- nawk -v OUT=${OutFile} -F"," ' BEGIN { count = 0+0; } function chk2(arg1,arg2,val) { sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); sub(/^"*/,"",arg2); sub(/"*$/,"",arg2); val=sprintf("%s %s",arg1,arg2); } function chk1(arg1,val) { sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); val=arg1; } { chk1($1,UserID); chk2($8,$9,Name); printf("%s,%s\n",UserID,Name); #printf("%s,%s\n",UserID,Name) >> OUT; count++; } END { printf("Output number : %d\n",count); }' ${FILE} |
>>4997 べた > 「FILE=/txt.csv」の場合 パス名末尾の / を出力しないようにしていたためですね。 echo ${FILE} | sed -n -e 's#\(.*/\)[^/]*#\1#p' こうすれば出力されると思いますが、 逆に /hoge/fuga.txt のような場合でも /hoge/ となります。 > 「FILE=txt.csv」の場合 パスが指定されていないので、ブランクで正しいと思っていますが。 (そういった条件もありませんでしたし。) >>4998 ふくし nawk は参照渡しできないはずなので、そういう書き方ではできません。 ただ nawk では、ユーザ関数の引数として定義された変数を除き、 すべてグローバル変数だと思うので、やろうとしていることはできます。 |
>>4997 べた ありがとうございました。 出力されました。 |
>>4999 zsh お礼先誤りですみません。 ありがとうございます。 >> 「FILE=txt.csv」の場合 > パスが指定されていないので、ブランクで正しいと思っていますが。 > (そういった条件もありませんでしたし。) No. 4994で、自分でファイル名のみの場合、値なしとしたいと 書いておきながら正しい動きなんですかと質問すみませんで した。 |
>>4998 ふくし えっ、Solairs8 の nawk って return を使えないんでしょうか? |
>>5002 sfish man には return [expr] と記載があったので、リターンコードを返すものだと思っていましたが、 確かに値を返すことも出来ました。こっちの方がいいですね。 |
>>4999 zsh > ただ nawk では、ユーザ関数の引数として定義された変数を除き、 > すべてグローバル変数だと思うので、やろうとしていることはできます。 どういうことでしょか。 nakwで関数を作るのが不慣れなもので、 nawk内で定義した変数はグローバル変数なので、nawk内であれば、 ユーザ定義関数でも参照や書き換えができるということでしょうか。 また、 ユーザ定義関数ないで定義した変数は、関数内でしか有効とならない ということでしょうか。 例などを載せてくれるとありがたいのですが。 |
>>5004 ふくし > nawk内で定義した変数はグローバル変数なので、nawk内であれば、 > ユーザ定義関数でも参照や書き換えができるということでしょうか。 その通りです。 ただ、 >>5002 sfish で return で値が戻せることを教えて頂いたので 関数側は、 --------------------------------- function chk1(arg1) { sub(/^"*/,"",arg1); sub(/"*$/,"",arg1); return arg1; } --------------------------------- のようにして、呼び出し側は --------------------------------- UserID = chk1($1); --------------------------------- とすれば、やろうとしていることができると思います。 |
初歩的な質問ですが 内蔵HDDを増設し「label:Backup」として、クリックしますと「sdb」と表示されています。 プロパティで、場所は/mntとなっています。 このHDDに mv /home/ormaster/123.txt sdb/123.txt とファイルの移動をしたいのですが方法を教えてください。 |
>>5005 zsh ありがとうございます。 |
エラーメッセージ「cannot execute binary 」についての質問。 以前にservice sendmail start 2<&1 | /bin/mail -s "件名" wenbi@akw.com.cn というコマンドを実行して、正常です。 しかし、下記のコマンドを実行して、「cannot execute binary 」というエラーメッセージを出ました。 この後、上記のコマンドを実行しても、エラーを出ます。 service sendmail start infile.txt iconv -f EUC-JP -t Shift_JIS infile.txt < infile2.txt cat infile2.txt | /bin/mail -s "件名" wenbi@akw.com.cn |
>>5006 まえ mount 済みであれば、mv /home/ormaster/123.txt /mnt/123.txt で いけるのではないかと思います。 >>5008 山田洋子 よくわかりませんが、cannot execute binary のエラーメッセージを 出力しているのが service コマンドなのか、iconv コマンドなのか、 cat や mail なのかを調べてみてはどうでしょうか。 |
nawkでsystem関数で、コマンドを実行しています。 今、system関数で実行したコマンドの結果を変数 に格納したいのですが、結果のステータスが格納 されて、コマンドの実行結果が格納できません。 どうしてなのでしょうか。そもそも不可能なのでしょうか。 system関数で、dateコマンドを実行し、結果を変数に 格納して、nawk内で使用したいのです。 nawk '{system("date +%Y%m%d")}' 環境は、 Solaris8 bsh です。 |
>>5010 ふくし system は単なるコマンドの実行であり、コマンドの標準出力を受け取るような 仕組みになっていません。この場合は getline を使うべきかと思います。 |
>>5011 68user ありがとうございます。 上手くいきました。 |
完全ガイドwindowsxp基本+Q&A 2008,3,20 p275,Q057 1・アイコンの数を増やすは、あるが、減らす方法が、無い。 2・初心者に解かるように、教えて。やり方がわからへん。 |
特定のアイコンを消す方法です。 |
はじめまして ネットワークプログラミングのページは とってもためになりました。 ・読みやすい ・わかりやすい ・内容がある すばらしいです。 少なくとも私の嗜好とあうはず。 なので、 おすすめ書籍を紹介してください! ・実践的にアプリケーションを作る ・複数ファイルのビルドを説明 ・winコンポーネント ・プロセス間通信 ・管理人さんのように読みやすく、わかる、内容がある ・ネットワークアプリ(サーバー、メーラーetc) ・c言語、perl、php(windows いま、プロキシサーバと、メールサーバに興味があるので、 それが作れるような本。(あくまでわかりやすく言ってます) ぜひ、よろしくお願いします。 |