|
>>3067 68user 私もcompress→uncompressと試してみました。 解凍後のファイルサイズも一致しており、上手くいっているようです。 とても助かりました。ありがとうございます。 実はもうひとつ教えていただきたいことがありまして・・・ cshellで文字列操作は可能なのでしょうか? 下記を解決する方法があれば教えて下さい。 Q1.指定したディレクトリからファイル名を変数に取得。 Q2.上記Q1でAAA_YYYYMMDD.txtと言う名前を取得できたとして、 YYYYMMDDのみを切り出して、shell内で用意した日付と大小を 比較出来るのでしょうか? ご存知の方、教えて下さい(T_T) |
|
>>3074 68user ありがとうございました。 環境が整ったときにtcshで確認しようと思います。 |
|
親プロセスで子プロセスをforkするC言語プログラムがあります。 子プロセスは複数作成され、処理が終わると自動的に消滅します。 親プロセスで現在存在している子プロセスの数を把握したいのですが、簡単な方法はありますでしょうか。 子プロセスの数だけ分かれば良いです。 子プロセス数カウンタを設け、forkでインクリメントし、子プロセスの終了を検知してデクリメントする方法もあるかと思いますが、もっと簡単な方法があれば教えていただけますでしょうか。 よろしくお願いします。 |
|
>>3075 美春 考え方を変えて、日本語以外を除くとするなら % sed 's/[a-zA-Z0-9]//g' < file など。本当に日本語だけを拾いたいなら http://www.din.or.jp/~ohzaki/perl.htm#JP_Match を参考に perl でやるのがよいでしょう。 >>3076 山田 > cshellで文字列操作は可能なのでしょうか? foreach file (AAA_*.txt) set date=`echo $file | sed 's/^AAA_\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\).*/\1/'` echo '$file -> $date' if ( $date < '20020114' ) then echo $date endif end 仕事や課題を丸投げされると答える側もつまらないです。質問するなら もっとおもしろい質問をしてください。 お金を払っていただけるなら、(お仕事として) つまらん質問にも 答えますけど。 >>3078 koko > 親プロセスで現在存在している子プロセスの数を把握 > したいのですが、簡単な方法はありますでしょうか。 簡単、というか適当な調べ方でよいなら、ps して、親プロセスが 自分であるプロセス一覧を取得、などがあると思いますが、 ps しているプロセスは除くとか余計な処理をしなきゃいけない と思うので、結果的にはあまり簡単じゃないと思います。 - 親がいろんな仕事をするのなら、fork するときに インクリメントして、SIGCHLD を受けるたびに デクリメント (>>2988 を参照) - 親は子の終了を待つだけなら、fork するときに インクリメントして、wait して、wait から戻って きたらデクリメント。 でいいんじゃないでしょうか。 |
|
>>3079 68user やはり、ご指摘の方法が妥当なところのようですね。 この方法で対応する事とします。 ありがとう御座いました。 |
|
>>3076 山田 ご回答ありがとうございます。 >仕事や課題を丸投げされると答える側もつまらないです。質問するなら >もっとおもしろい質問をしてください。 了解しました。 先日、ほぼ一日調査してたのですが出来なかったもので。。。 申し訳ないです。。 |
|
>>3067 68user うまくいきました。 本当にありがとうございました。 perlの方も挑戦してみます。 度々の質問で申し訳ありませんが、 grepの正規表現で"'"(シングルクォーテーション) を出さないようにしたいのですが、 うまくいきません。 grep '[\']' <file> だとダメみたいです。 どうすればよいのでしょうか? 初心者の質問ですみません。 よろしくお願いします。 |
|
>>3082 美春 grepは行単位で処理するので、シングルクォートを含む行を表示しない、 という処理は可能です。grepに-vをつけると、条件に合わない行のみを 出力するので、 % grep -v "'" filename とすればfilenameファイル内のシングルクォートを含まない行のみを 出力してくれます。 もしシングルクォートを文字単位で削除したいのであれば、 % sed -e "s/'//g" < filename とすればよいと思います。 |
|
No. 3083 has 感動してしまいました。 manで調べろと怒られるかと 思ったのにご丁寧に ありがとうございました。 |
|
こんにちは、山田です。 shellにワイルドカードを含んだ引数を文字列として渡したいのですが上手くいきません。 例えば、 aaa.sh zz*.txt や aaa.sh zz\*.txt と渡すとローカルにある対象となるtxtファイルを全て引数としてもってきてしまいます。 aaa.sh zz'\''*'.txt などとしてもダメなようです。 出来ないのでしょうか? 申しわけありませんが、教えて下さい。 |
|
>>3085 山田 さん、 シェルはなんでしょうか? zsh だと > echo *.txt aaa.txt bbb.txt ccc.txt > echo '*.txt' *.txt のようになりました。 |
|
>>3086 ふくし 様、ご回答ありがとうございます。 cshです。 やりたいことは、 aaa.sh ZZ*.txt と指定した時にshell内で、 set filename = arg[1]とし、 filenameに"ZZ*.txt"という文字列をセットしたいのです。 |
|
>>3087 山田 さん 下で書いたつもりだったんですが (^^;;; 引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります? |
|
>>3086 ふくし 様 >引数「ZZ*.txt」全体をシングルクォート '' で囲んだらどうなります? やはりカレントの該当するファイルが引数に入ってしまいます。 arg[1]の内容が"ZZa.txt ZZb.txt ZZc.txt"というような感じです。 んー、こまっております(^^;) |
|
>>3089 山田 % cat hoge set filename='*.c' echo $filename % csh -fx hoge set filename=*.c echo *.c a.c b.c c.c d.c というわけで、csh では ただの文字列として set しても、 glob 展開されます。よって、参照するたびに echo "$filename" とダブルクォートで囲むか (面倒)、あるいは set noglob で変数を展開しないようにする、と。 もっとよいのは perl や ruby などに乗り換えることです。 |
|
>>3089 山田 さん、 知らぬこととはいえ失礼しました。 そんな致命的な非互換があろうとは、、。 シュバング行で #! /bin/sh と書いてしまって、Bourne Shell で書き直すってのは どうでしょうね。 コマンドを手入力するのは csh 系が、 シェルスクリプトを組むのは Bsh 系がいいって聞いた気がします。 (気のせいか? ;;; もっぱら私はちょっとでも論理のあることは Perl にするのでどっちも知りませんが、、。 |