- 1 名前:login:Penguin [2007/07/10(火) 23:17:13 ID:qGthZdME]
- UNIX板のスレを見ている方も多数おられるかと思いますが、
まあそれはそれとして、BASHウゼーとか言われる心配なく 平和にLINUX的スクリプト談義しましょうよ。 初めての自作スクリプト、自信ないから見てください。な初心者から トリッキーな技を駆使した作品を披露したい、蘊蓄を語りたい上級者まで いろいろな人に参加して頂けると嬉しいです。 perlやらPythonやらの話が混ざっても良いんでない? 【sed】シェルスクリプト総合@LINUX Part2【awk】 pc11.2ch.net/test/read.cgi/linux/1154578200/ pc8.2ch.net/test/read.cgi/linux/1121994321/ >>2-5あたりに色々と。
- 375 名前:login:Penguin mailto:sage [2007/12/06(木) 18:35:40 ID:bgO18Eza]
- と、思ったら出来たw
if [ -z "$WAITSEC" -o \( $WAITSEC -lt 60 \) ]; then こういうことだな。 優先順位がおかしいんだ。
- 376 名前:login:Penguin mailto:sage [2007/12/07(金) 00:20:04 ID:2WlU8Mqa]
- >>373
-z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか? おそらく -z "$WAITSEC"のときは 後ろの条件は 「-lt 60」になるだろうから、>>374のようにするか${WAITSEC:-0}とかやったらいいんじゃね?
- 377 名前:login:Penguin mailto:sage [2007/12/07(金) 10:01:03 ID:uKkYmJTB]
- >WAITSEC=""
なので、 >if [ -z "$WAITSEC" -o $WAITSEC -lt 60 ]; then は if [ -z "" -o -lt 60 ]; then と解釈されてエラー。 zsh は sh と違って $WAITSEC は "$WAITSEC" と同じ意味なのでエラーにならない。 "$WAITSEC" -lt 60 と書き換えた場合は、 >-z "$WAITSEC" の成否にかかわらず $WAITSEC -lt 60が実行されちゃってるから問題なんじゃないか? この理由で正しい。
- 378 名前:login:Penguin mailto:sage [2007/12/11(火) 22:53:04 ID:8t30b6aC]
- シェルスクリプトにコメントを書くには
# comment っていう感じに # を行頭につけてコメントにしますが、自作のシェルスクリプト等に 日本語でコメントを埋め込むのは良くない事なのでしょうか? 英語でコメントを埋め込むべきなのでしょうか? 理由>環境によっては文字化けするかもしれないから その場合、英語では上手くコメントがかけないのですが、、、皆さんはこの辺どうしていますか?
- 379 名前:login:Penguin mailto:sage [2007/12/11(火) 23:22:06 ID:8VUAk6YG]
- >>378
英語では上手くコメントがかけない、って、自分が書いた自分用のスクリプトだったら、 べつに、自分にさえ分かればいいんじゃないの?極端な話、ローマ字で書いた日本語でもいいんじゃないかと。
- 380 名前:login:Penguin mailto:sage [2007/12/11(火) 23:27:45 ID:LcSZkVoI]
- Shift_JISで書いて2バイト目に ¥ が含まれるとコメントが継続しちまうかな、
と思ったんだが、そうでもないみたいだな。
- 381 名前:login:Penguin mailto:sage [2007/12/12(水) 08:33:10 ID:itajSrlG]
- >>379
いやー、他の人にもスクリプトの内容が分かるようにコメント書かないといけない場合はどうすれば? 今はローマ字で書いたりしていますが、さすがに見にくいというか・・・ かといって英語では上手くかけないし・・ C言語やJava等では // 日本語コメント が使えるし MS-DOSの.batファイルでも REM 日本語コメント が使える、Windows Script Hosting(WSH)であっても '日本語コメント が使えて、大抵のスクリプト言語は日本語のコメントが使えるのになぜにLinuxのシェルスクリプト だけこんな事で悩まないといけないんだろうと・・・。 まぁOSが違うから文字コード周りのトラブルなんだろうけど・・。
- 382 名前:login:Penguin mailto:sage [2007/12/12(水) 09:12:34 ID:fnWAKO+5]
- 使えるか使えないかっていうなら使えるだろ。
確実に自分しか使わないならShift_JISのようなbrain damagedな文字コードじゃなきゃ 別に何でもいいんじゃない。 しかし使ってよいか使わざるべきかというと、一般にスクリプトって どのロケールで実行されるかわからないよとかの問題が出てくる。 あなたが出した例ではCやJavaのソースファイルはコンパイルするときの 環境が限定できれば問題ないし、DOSのバッチファイルも日本語DOSしか 考えていない。
- 383 名前:login:Penguin mailto:sage [2007/12/12(水) 11:25:06 ID:ytRjAEEx]
- >Shift_JISで書いて2バイト目に ▼ が含まれるとコメントが継続しちまうかな、
sjis だろうが何だろうがコメントの継続なんてありません。 >しかし使ってよいか使わざるべきかというと、一般にスクリプトって >どのロケールで実行されるかわからないよとかの問題が出てくる。 コメントにロケールなんて関係ありません。
- 384 名前:login:Penguin mailto:sage [2007/12/12(水) 11:32:57 ID:11rQvfIz]
- 英語くらい書けよ。
- 385 名前:login:Penguin mailto:sage [2007/12/12(水) 12:33:25 ID:5zz/Y7Bm]
- っつか、どういう環境(=人間環境)だか知らないけど、
そんな雰囲気だと、頑張って英語でコメントを書いても、 肝心の「他の人」が、それを理解出来ない、 ということが容易に想像出来てしまうわけで、 だったらローマ字でいいじゃん、と思う。
- 386 名前:login:Penguin mailto:sage [2007/12/15(土) 11:57:10 ID:FOfJjZuV]
- >>383
コメントってのは実行されるときはロケール関係ないけど 元々読むものだから、ロケールばらばらと読みにくくて困るよね って意味だよ。たぶんね。
- 387 名前:login:Penguin mailto:sage [2007/12/19(水) 22:19:06 ID:qeHYVBDH]
- #!/bin/bash
for i in *.txt で、'*.txt' で展開されるリストの長さに制限はある? ls: argument list too long になる長さでも処理できるようだが、他に何か別の制限はある?
- 388 名前:login:Penguin [2007/12/20(木) 18:50:14 ID:Qtkk7tpx]
- sedについての質問です
aaa bbb ccc という出力を、sedコマンドで一行にしたいのです。 aaa bbb ccc このように。 どうしたらよいですか。 逆の、sed -e 's/\ /\n/g' はできるのですが。
- 389 名前:login:Penguin mailto:sage [2007/12/20(木) 21:20:24 ID:1r8qT2Sh]
- awkなら
$ (出力するコマンド) | awk '{printf("%s ", $0)}' でできるんだけどなぁ
- 390 名前:login:Penguin mailto:sage [2007/12/20(木) 21:47:48 ID:p9kMPhFx]
- $ cat input
aaa bbb ccc $ sed -n 'H;${g;s/¥n/ /g;s/^ //p;}' input なんか無様だ。きっともっとスマートに出来るに違いない。
- 391 名前:login:Penguin mailto:sage [2007/12/20(木) 21:49:27 ID:p9kMPhFx]
- もし各行が空白文字を含まないなら、
echo `cat 元テキスト` > 新テキスト でいいな。
- 392 名前:login:Penguin mailto:sage [2007/12/20(木) 22:14:22 ID:IRXLh3Ok]
- >>388
sed ':loop; N; s/\n/\ /g ;$!b loop' hoge
- 393 名前:login:Penguin mailto:sage [2007/12/20(木) 22:19:20 ID:UDgG5/dT]
- sedにこだわらなければ
tr -s '\n' ' ' < input とか
- 394 名前:login:Penguin mailto:sage [2007/12/20(木) 22:28:20 ID:p9kMPhFx]
- 目的によっては、
$ fmt input fmtってUNIX標準?
- 395 名前:login:Penguin mailto:sage [2007/12/20(木) 22:39:06 ID:Qtkk7tpx]
- >>389-393
こんなにレスが来るとは。 皆さんありがとうございます。 すべて試してすべてで出来ました。 echoとtrはなるほどという感じです。 他は知りませんでした。レベル1アップですね。
- 396 名前:login:Penguin mailto:sage [2007/12/20(木) 22:43:02 ID:Qtkk7tpx]
- >>394
更新遅れた。 できました。オプションすらいらないとは。
- 397 名前:login:Penguin mailto:sage [2008/01/06(日) 19:04:19 ID:tfZRITK8]
- awkで
awk '{print $2,$3}' とすると2,3番目が表示されますが 二番目以降全て表示するにはどうすればいいのでしょうか?
- 398 名前:login:Penguin mailto:sage [2008/01/06(日) 19:44:21 ID:TN85yzo6]
- awk 'gsub($1,"")'
- 399 名前:login:Penguin mailto:sage [2008/01/06(日) 21:41:07 ID:HrtO6pOF]
- $1に特殊文字が入れられると思わぬ結果になりそうな気がする。
- 400 名前:login:Penguin mailto:sage [2008/01/06(日) 21:53:19 ID:xjxCtnUs]
- awk '{for (i=2;i<=NF;i++){printf($i" ")}}'
- 401 名前:login:Penguin mailto:sage [2008/01/06(日) 22:56:50 ID:HrtO6pOF]
- フィールド区切が複数のスペースやタブコードでも、1個のスペースに置換されてしまう気がする。
>>397の「全て」がそこまで求めているかは分からないが。
- 402 名前:login:Penguin mailto:sage [2008/01/07(月) 00:59:34 ID:Lq+3ioDo]
- >>401
awk -Fなにか '{for (i=2;i<NF;i++){printf("%s%s", $i, FS)};print $NF}'
- 403 名前:397 mailto:sage [2008/01/07(月) 02:29:17 ID:SZZlXYY6]
- ありがとうございます。
最初 >>387 さんと同じことを思ったのですが他に オプションか何かで用意されていると思ってました。 402さんのを使わせていただきます
- 404 名前:397 mailto:sage [2008/01/07(月) 02:29:58 ID:SZZlXYY6]
- s/387/398
- 405 名前:login:Penguin mailto:sage [2008/01/07(月) 17:21:59 ID:CzyB4/IB]
- >>402
これだと複数の空白が一つになって表示される
- 406 名前:login:Penguin mailto:sage [2008/01/07(月) 18:30:26 ID:DBTZ8VT2]
- awk '{gsub($1, "");print substr($0,2)}'
- 407 名前:login:Penguin mailto:sage [2008/01/07(月) 18:59:30 ID:AGg2gknU]
- hint:
aho,choaho,kusoaho,doaho ∴ awk '{print substr($0,length($1)+2)}'
- 408 名前:login:Penguin mailto:sage [2008/01/07(月) 20:07:07 ID:81ckgAQ5]
- 個人的には>>398をアレンジして、
gawk 'gsub(/^[[:blank:]]*[^[:blank:]]+/,"")' かな。
- 409 名前:login:Penguin mailto:sage [2008/01/07(月) 20:13:04 ID:DBTZ8VT2]
- なんだ>>398で既出だったのね。見落としスマソ。
- 410 名前:login:Penguin mailto:sage [2008/01/07(月) 23:07:24 ID:6d+dex8H]
- [file1]
bar=234 [file2] foo=123 Bar=987 と2つのkey=valueな内容が入ってるファイルがある。ここで、file1には ないがfile2にはあるkeyのみ(case-insensitiveな比較で、また、valueは 違っていてよい)を拾いkey=valueを出力したいのだけど、一行で書けないかな? どういう出力になってほしいかというと $ myuniq --split-char='=' --field-index=1 --print-unique file1 file2 foo=123 というような実行イメージ。awkで awk -F= '{ line[toupper($1)]=$0; seen[toupper($1)]++; } END { for (key in line) if (seen[key] == 1) print line[key]; }' file1 file2 みたいなのはでっち上げたんだけど、正直汚い。
- 411 名前:login:Penguin mailto:sage [2008/01/07(月) 23:30:18 ID:6RYIn4eu]
- 回答じゃなくてすまんのだが、最後にあるワンライナーだと、
2ファイル通して1回しか現れなかったものを表示するから、 「file1にはないがfile2にある」ものだけでなく 「file2にはないがfile1にある」も出てこないか?
- 412 名前:login:Penguin mailto:sage [2008/01/07(月) 23:35:18 ID:6RYIn4eu]
- 負けず劣らずかっこ悪いシロモノ
for w in `cut -d= -f1 file1 file2 |tr A-Z a-z|sort|uniq -c|sed -n 's/ 1 *//p'`; do grep "^$w=" file2; done
- 413 名前:login:Penguin mailto:sage [2008/01/07(月) 23:52:40 ID:DBTZ8VT2]
- grep -v -i "`cut -d= -f1 file1`" file2
重複は無考慮
- 414 名前:login:Penguin mailto:sage [2008/01/07(月) 23:54:29 ID:6d+dex8H]
- >>411
あ、すみません。バグです。が、元の仕様が厳しすぎで、 どちらかにしかないエントリを出す でも大丈夫でした。 file1かfile2のどちらかにのみあるkeyに対応するkey=valueを出力する に仕様を訂正させてください。 何をしたいのかというと、Windowsの環境変数を手元のUNIXな環境に 取り込みたいのですが、その際に自分で定義している分については 上書きされないようにしたいのです。 hostA$ env > hostA.env hostB$ env > hostB.env hostB$ myuniq ... hostA.env hostB.env > diff.env hostB$ . ./diff.env みたいなことをしたいと。で、片方の環境が Windows なもので、 case insensitiveな比較とかも必要になってます。 行全体ではなく特定のフィールドのみ見て uniq/diff 処理して出力って 簡単そうで微妙に面倒です。
- 415 名前:login:Penguin mailto:sage [2008/01/07(月) 23:59:58 ID:6d+dex8H]
- >>413
おおー。grepのexprに改行入れるとそんな動作になるとは! エレガントです。勉強になりました mOm
- 416 名前:login:Penguin [2008/01/08(火) 18:35:59 ID:0P1F18Bp]
- 1行で2つのコマンドを実行するときに
2つ目に実行したコマンドに、1つ目に実行したコマンドの引数を そのまま渡したい場合の記述方法がわからず、困っています。 $ vi hogehoge; echo ?? *??が不明箇所* 上記の例の場合は2つ目に実行しているecho文の出力結果でhogehogeを表示させたいのですが。。 対処方法はないでしょうか? よろしくお願いいたします。
- 417 名前:login:Penguin mailto:sage [2008/01/08(火) 18:38:30 ID:k6k1za9N]
- >>416
i="hogehoge"; vi $i; echo $i じゃだめなん?
- 418 名前:416 mailto:sage [2008/01/08(火) 19:34:39 ID:0P1F18Bp]
- >>417
ありがとうございます。 その方法があったことに気づきませんでした。 おかげで解決しました、感謝です><
- 419 名前:login:Penguin mailto:sage [2008/01/08(火) 23:12:30 ID:OqUgF6yk]
- vi hogehoge; echo !$
- 420 名前:login:Penguin mailto:sage [2008/01/08(火) 23:26:00 ID:5sg6/WvN]
- >>419
それタイプしたタイミングではまだ!$は前行のコマンドの。
- 421 名前:login:Penguin mailto:sage [2008/01/08(火) 23:33:15 ID:A2IkwjEN]
- 引数が一つだけなら
vi hogehoge; echo $_ でもいけるな。
- 422 名前:login:Penguin [2008/01/10(木) 13:02:51 ID:9dVYtTPe]
- cshからJavaを呼び出すシェルを作成しています。
その呼び出したJava内部で例外が発生した場合、 以降のシェルの処理を続行させたくありません。 どの様にすればよいのですか? Javaのcatch節でSystem.exit(1);とかで処理を終了させて、 cshでそれを検知する方法があるのかなぁ? と漠然には思うのですが・・・
- 423 名前:login:Penguin mailto:sage [2008/01/10(木) 19:51:46 ID:qThypT9T]
- >>422
System.exitが何をするのか分かっているなら、 Javaコマンドの終了値を普通にifなりswitchなりで受けて、csh側からもexitすれば良いだけでは? 単純に例外=即終了と決め打ちなら良いけど、例外によって複数の処理をさせたくなると、 System.exitの終了値を多数用意して管理しなければならなくなって面倒だけどね ここからはポリシーの問題になるけど、System.exit等を使ってコマンドの終了値を利用するよりは、 どんな例外で終了したのかを前もって文字列等でstderrにでも吐き出したり、 終了した例外を表すような長さゼロのテンポラリファイルでも作ってから、Javaコマンドの方を終了させておいて、 csh側からは、むしろその文字列やファイル名を評価させてexitさせるようにした方が、後からデバッグする時とかは楽だよ 更に言えばシェルプログラミングにcshを使うのは止めるべき www.klab.ee.utsunomiya-u.ac.jp/~hiroki/csh-whynot.euc www.klab.ee.utsunomiya-u.ac.jp/~hiroki/sh-perl-tips/
- 424 名前:login:Penguin mailto:sage [2008/01/10(木) 21:50:31 ID:CJRDs9Ag]
- Javaのポリシーは知らないが、エラーメッセージと終了コードは二者択一せにゃならんものではない気がする。
- 425 名前:login:Penguin [2008/01/11(金) 14:14:06 ID:mrGJLB/g]
- >>423、424
ありがとうございます。 シェルスクリプト自体、経験が浅い上に今回の要望がcshというのが 決まっているもので・・・ 困っています。。。 2chでの質問自体も初めてなもので・・・ 準正常として扱うような例外は全てJava側で処理をしてプログラムは 正常終了として扱っています。 処理続行不可能と判断した、ランタイム系やIO例外などが発生した場合は 後続のシェルを流したくない。 という状況です。 if $JAVA_CMD then 続き else exit 1 fi 以下処理続く ・・・ ってな感じにしたのですが、どうも上手くJavaでexitした値が取れないです。 文法が間違っているのですかね? もう少し調査してみますが、上記の書き方で間違いがあればご指摘頂きたいです。 後は教えていただいた、テンポラリファイルでの判断も考えてみます。
- 426 名前:login:Penguin mailto:sage [2008/01/11(金) 15:11:54 ID:GLHvzQDj]
- findコマンドの結果をツリービュー(treeコマンドの結果的なツリー表示)で出すコマンドまたは方法ってありますか?
- 427 名前:login:Penguin mailto:sage [2008/01/11(金) 16:08:44 ID:6CIbL1kG]
- >>425
cshなら $JAVA_CMD if ($? != 0) then echo "failed" exit $? endif echo "OK" でどう?
- 428 名前:login:Penguin [2008/01/11(金) 16:55:30 ID:mrGJLB/g]
- >>427
ありがとうございます。 教えていただいた方法で、想定通りの動作になりました。
- 429 名前:login:Penguin mailto:sage [2008/01/11(金) 21:11:49 ID:OPXAXUzh]
- >>426
普通にtreeコマンド使うんじゃだめなん?? findで絞った結果を出したいのかなぁ。
- 430 名前:login:Penguin mailto:sage [2008/01/11(金) 22:17:07 ID:4hqMEkJ5]
- grep -f find結果 tree結果
とか。 # 本気にしないように。
- 431 名前:login:Penguin mailto:sage [2008/01/11(金) 23:02:21 ID:aloediIm]
- 基本的にはtree | grep なんちゃら でいいんじゃね?
- 432 名前:login:Penguin mailto:sage [2008/01/14(月) 11:50:49 ID:3iR1bkH0]
- 画像の特定の領域だけを一括でぼかしたいのですが
いい方法はありませんか?
- 433 名前:login:Penguin mailto:sage [2008/01/14(月) 12:00:15 ID:ZjONjaHo]
- つ netpbm
- 434 名前:login:Penguin mailto:sage [2008/01/14(月) 12:12:55 ID:6n5zEajJ]
- つimagemagick
- 435 名前:login:Penguin mailto:sage [2008/01/14(月) 14:01:26 ID:Or9vH7Fn]
- メールアドレスの@以降の最後の国を表すCountry Codeの部分だけを抜き出すには
どのような正規表現を使えば良いでしょうか? @hotmail.co.jp の.jp の部分を見る感じです。 .jp以外は無視する、という感じです。これで日本のメールしか相手にしない事になりますよね。
- 436 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:07 ID:ZjONjaHo]
- spam避け?
日本からも.comや.netや.orgや.infoや.bizや.acや.tvや.toや(以下略)の アドレスでメールが送られることはあるぞ。
- 437 名前:login:Penguin mailto:sage [2008/01/14(月) 14:04:25 ID:Or9vH7Fn]
- $.jp
↑これでいいんでしょうか?正規表現全く知らない状態でネットでちょっと検索してみたのですが・・・
- 438 名前:login:Penguin mailto:sage [2008/01/14(月) 14:05:05 ID:Or9vH7Fn]
- あっちゃー、そうなんですか・・・
海外のメールを相手にしない方法って無いんですかね・・・ 英語でViagraとかうるさいんですよ。
- 439 名前:login:Penguin mailto:sage [2008/01/14(月) 14:17:08 ID:6n5zEajJ]
- /[あ-ん]/?
ひらがながないメールは無視してもよかろう。
- 440 名前:login:Penguin mailto:sage [2008/01/14(月) 14:37:34 ID:FCIPzPAY]
- ヘッダの Content-Type を見て弾くとかどうよ?
^Content-Type: .*iso-2022-jp
- 441 名前:login:Penguin mailto:sage [2008/01/14(月) 14:42:36 ID:6n5zEajJ]
- 最近はutf-8なのも多いよ。
- 442 名前:login:Penguin mailto:sage [2008/01/14(月) 14:54:07 ID:JtG94m55]
- utf-8 は違法で、危険運転致死罪が適用になるんじゃ?
- 443 名前:login:Penguin mailto:sage [2008/01/14(月) 22:54:28 ID:RfE0b+o0]
- >>437
\.jp$ では?
- 444 名前:login:Penguin mailto:sage [2008/01/16(水) 13:17:12 ID:ZRO/FTzi]
- テキストファイルを、最後の3行を除いて出力したいのですが
何か良い書き方はないでしょうか。 sed '$d' xxxx | sed '$d' | sed '$d' と書くくらいしか思い付かなくて。
- 445 名前:login:Penguin mailto:sage [2008/01/16(水) 14:26:14 ID:1obpvu1A]
- >>444
head -n -3 foobar.txt
- 446 名前:login:Penguin mailto:sage [2008/01/16(水) 17:01:38 ID:IKqjky5V]
- awk '{a[NR]=$0}END{for(j=1;j<=NR-3;j++) print a[j]}' a.txt
- 447 名前:login:Penguin mailto:sage [2008/01/16(水) 18:25:12 ID:ZRO/FTzi]
- >>445
head のオプションは見落としてました…ありがとうございます
- 448 名前:login:Penguin [2008/01/16(水) 21:56:01 ID:KAlEWwYc]
- ランダムな数字が欲しいとき,どうするのが簡単?
1. $$ 2. $RANDOM 3. /dev/urandom 4. 時計 あたりを思いついたんだけど
- 449 名前:login:Penguin mailto:sage [2008/01/16(水) 22:14:57 ID:yh54UVVr]
- ワシは、ランダムな数字の用途により生成手段を変えてるような気がする。
- 450 名前:login:Penguin mailto:sage [2008/01/16(水) 22:16:21 ID:KAlEWwYc]
- 1. 偏りそう
2. bash依存 3.4. 面倒 という問題点があるから,誰かいい方法教えてくれないか?
- 451 名前:login:Penguin mailto:sage [2008/01/16(水) 22:19:14 ID:KAlEWwYc]
- >449 たしかに用途によって求められる強さが違う気がする.
とりあえずこうしとけ的な汎用的な方法はないんかな. いちばん手軽な方法が知りたい
- 452 名前:login:Penguin mailto:sage [2008/01/16(水) 22:47:32 ID:HQvmxN1E]
- >>448
$$はスクリプト内で複数個必要だと使えない罠 dateのmanを見ていたら、 %N nanoseconds (000000000..999999999) というのがあった。こんな感じ % echo -n `date +%N` 431218994 % echo -n `date +%N` 857494685 % echo -n `date +%N` 269031777 % echo -n `date +%N` 803351248 % echo -n `date +%N` 195538275 % echo -n `date +%N` 538357509 % echo -n `date +%N` 058776188 %
- 453 名前:login:Penguin mailto:sage [2008/01/16(水) 23:09:59 ID:PJonPFmQ]
- jotはたぶんBSD系限定だよな。
jot -r 10 1 6 /dev/urandomは10進数テキストで得るのがめんどーだろうか。 dd if=/dev/urandom bs=2 count=1 2>/dev/null | od -vd 左カラムがじゃまだな。 sed 1q |cut -f2 -d' ' とかで削るか。
- 454 名前:login:Penguin mailto:sage [2008/01/16(水) 23:21:36 ID:KAlEWwYc]
- >452,453
なるほど.date +%Nはいい感じ. jot便利そうだよ,jot.犬にもこんなの欲しいな. ありがとう
- 455 名前:login:Penguin mailto:sage [2008/01/16(水) 23:24:18 ID:HQvmxN1E]
- od -t u1 /dev/urandom | awk '{print $2;exit}'
- 456 名前:login:Penguin mailto:sage [2008/01/16(水) 23:33:28 ID:PJonPFmQ]
- r=`fortune | md5sum - | sed 's/^¥(........¥).*/¥1/'`
r=`printf %d 0x$r` ごめんなさいごめんなさい。
- 457 名前:login:Penguin mailto:sage [2008/01/16(水) 23:51:47 ID:puzD1M+G]
- 普通に perl -e 'print int(rand(1000))' じゃダメなの?(perl5前提だけど)
- 458 名前:login:Penguin mailto:sage [2008/01/16(水) 23:55:16 ID:KAlEWwYc]
- >457 これだけのためにperlやawkを出してきたくないという貧乏心があってwww
- 459 名前:login:Penguin mailto:sage [2008/01/17(木) 01:30:17 ID:xe77Y4ah]
- 時は金なり、というじゃない
- 460 名前:login:Penguin mailto:sage [2008/01/17(木) 01:45:37 ID:hGbWYs9C]
- つーか、乱数ってこれだけのため、っていうほど簡単なものじゃないと思う。
そういうものが必要な処理はシェルじゃなく、ちゃんとそれなりの言語でプログラムしたほうがいいかも。
- 461 名前:login:Penguin mailto:sage [2008/01/17(木) 09:08:26 ID:MJ2pzO6M]
- 確かに簡単な乱数ならともかく、ちゃんとした乱数が欲しい処理は言語引っ張り出したほうが良いかもね
- 462 名前:login:Penguin mailto:sage [2008/01/17(木) 09:18:44 ID:wcByJn9i]
- % i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \
| awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n 0 9.70% 1 10.70% 2 8.60% 3 11.00% 4 10.40% 5 8.90% 6 11.40% 7 9.70% 8 9.80% 9 9.80% (´・ω・`) % i=0; while [ $i -lt 1000 ] ; do echo "$i "`date +%N`; i=`expr $i + 1`; done \ | awk '{hist[int($2%10)]++} END{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n 0 9.20% 1 12.30% 2 8.60% 3 11.00% 4 11.20% 5 9.30% 6 11.40% 7 7.80% 8 11.40% 9 7.80% (゚д゚)
- 463 名前:login:Penguin mailto:sage [2008/01/17(木) 09:28:02 ID:wcByJn9i]
- % od -t u1 /dev/urandom \
| awk '{hist[int($2/256.0*10)]++} NR==1000{for (i in hist) {printf("%2d %5.2f%\n",i, hist[i]/NR*100) }; exit}' | sort -k1n 0 9.80% 1 9.50% 2 10.10% 3 9.80% 4 9.80% 5 9.40% 6 10.20% 7 10.20% 8 10.30% 9 10.90% (´・ω・`) % perl -e '$MAX=10;$LOOP=1000000; for (1...$LOOP) {$hist[int(rand()*$MAX)]++}; for (0..$MAX-1) {printf("%2d %4.2f%\n", $_, $hist[$_]/$LOOP*100) }' 0 9.98% 1 9.99% 2 9.99% 3 10.02% 4 10.03% 5 10.02% 6 9.92% 7 10.00% 8 10.00% 9 10.04% (゚∀゚) date +%Nは、ばらつきはともかく遅いな...
- 464 名前:login:Penguin mailto:sage [2008/01/17(木) 10:59:36 ID:bFGNQCBf]
- 遅いのは date +%N じゃなくて while のループだと思うよ。
- 465 名前:login:Penguin mailto:sage [2008/01/17(木) 11:37:17 ID:LfhUWWyD]
- >>450
> 2. bash依存 ksh88由来らしい tp://www.cs.princeton.edu/~jlk/kornshell/doc/man88.html ksh互換を期待できるなら使ってもいいんじゃね
- 466 名前:login:Penguin mailto:sage [2008/01/18(金) 01:58:10 ID:S6Zw/ddB]
- /usr/games/random -e 100; echo $? は?
- 467 名前:login:Penguin mailto:sage [2008/01/18(金) 07:42:17 ID:YTGcRcKS]
- >>466
/usr/gamesってそれ何年前のWSのディレクトリ構成だよ...
- 468 名前:login:Penguin mailto:sage [2008/01/18(金) 17:40:50 ID:wVas3OI3]
- findの検索結果でディレクトリの場合は最後に「/」をつけさせたいのですが、いい方法はあるでしょうか?
- 469 名前:login:Penguin mailto:sage [2008/01/18(金) 17:50:43 ID:YTGcRcKS]
- find . -exec ls -Fd {} \;
- 470 名前:login:Penguin mailto:sage [2008/01/18(金) 22:33:39 ID:EJvy1m4k]
- >>468
find (検索ディレクトリ) -type d -printf "%p/\n" -or -print
- 471 名前:login:Penguin mailto:sage [2008/01/18(金) 22:55:09 ID:S6Zw/ddB]
- >>467
最新のLinuxの(いやほんと。これだけは伝統的理由で残ってるのかな)
- 472 名前:login:Penguin mailto:sage [2008/01/18(金) 23:22:22 ID:6BHP4h96]
- >471 鳥は?
- 473 名前:login:Penguin mailto:sage [2008/01/19(土) 01:14:55 ID:ZLNpfSkQ]
- >>472
Debian (sid)。まあ bsdgames とかまんまレガシーなパッケージだけだけどね。
- 474 名前:login:Penguin mailto:sage [2008/01/19(土) 05:58:20 ID:JWtUz7T2]
- Debian etch にも/usr/games はあるな。
中みたらbannerとfortuneが入ってた。
- 475 名前:login:Penguin mailto:sage [2008/01/19(土) 08:07:34 ID:njld/y5g]
- シェルスクリプトの本で実用例の多い本ってありませんか?
|

|