- 1 名前:名無しさん@お腹いっぱい。 [2008/05/20(火) 20:58:04 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 シェルスクリプト総合 その10 pc11.2ch.net/test/read.cgi/unix/1202725267/
- 355 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 13:31:19 ]
- >>350
だったら、4桁数字だったら西暦、 2桁数字だったら日付、 Jan Feb等に一致したら月、 それ以外のフィールドは無視、というように 全フィールドをチェックすればできるな。
- 356 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:22:51 ]
- 338です。
あっという間にたくさんのレスが。ありがとうございます。 >>340 >>343 >>352 ありがとうございます。 #!/bin/sh の後に書いてやってみていますが、まだうまくいきません。 基本的な書き方がわかっていなさすぎなんでしょうね。 >>350 日付のフォーマットはこれだけ限定です。 過去スレ等、さらに読みに行ってきます。 本当に皆さんありがとう。
- 357 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:31:41 ]
- >>355
だったら ↓だな。 #!/bin/sh while read line; do for f in $line; do case $f in [0-3][0-9]) d=$f;; [1-2][0-9][0-9][0-9]) y=$f;; Jan) m=1;; Feb) m=2;; Mar) m=3;; Apr) m=4;; May) m=5;; Jun) m=6;; Jul) m=7;; Aug) m=8;; Sep) m=9;; Oct) m=10;; Nov) m=11;; Dec) m=12;; esac done printf '%d.%d.%d\n' $y $m $d done
- 358 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:43:10 ]
- 宗教的に問題ないなら GNU date 入れちゃいなよ。
便利だよ。
- 359 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:44:15 ]
- 宗教上の理由でそれは出来ません
- 360 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 14:46:23 ]
- ならしょうがない。
- 361 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 19:29:20 ]
- 輸血と献血とGNU date は家訓で禁じられてます
- 362 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 20:25:21 ]
- perlで我慢しる
$ cat <<END | perl -ane 'use Date::Parse; $t = str2time($_); ($s,$m,$h,$d,$M,$y) = localtime($t); print $y+1900 . "." . $M . "." . $d . "\n"' Fri, 16 May 2008 09:39:25 +0900 Sun, 18 May 2008 09:30:21 +0900 Mon, 02 Jun 2008 08:15:45 +0900 END 2008.4.16 2008.4.18 2008.5.2
- 363 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 20:27:13 ]
- use Date::Parse;
($s,$m,$h,$d,$M,$y) = strptime($_); print $y+1900 . "." . $M+0 . "." . $d+0 . "\n";
- 364 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 21:12:11 ]
- >>362
純正シェルでの >>357 の回答の後にperl出しても意味ないなぁ。
- 365 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 22:43:18 ]
- perlやGNU dateの方が書式に寛容
- 366 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/25(水) 22:47:29 ]
- perlが入っててもDate::Parseが入ってない環境が多いから動かない環境が多い。
- 367 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 01:57:12 ]
- 純正シェル(笑)
- 368 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 02:04:04 ]
- シェルってゆうな。クズ。
- 369 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 02:05:33 ]
- 貝殻
- 370 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 02:12:50 ]
- ゆうなって言うなこのクズ
- 371 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/26(木) 03:07:08 ]
- 稲村
- 372 名前:265 mailto:sage [2008/06/26(木) 17:31:41 ]
- bashのshはシェルの略なので
これからはbaと呼ぶことにします。
- 373 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:24:30 ]
- 338、356です。
勉強始めたばかりで適切なスレを見つけるのもままならない。 質問した後に、スレ違いだったようだと反省している。 実はbashでやっているんだが・・・ってこれを最初に言うべきだったんだね。 皆さんにいただいたヒントでなんとかしようとさらに勉強するつもりだ。 ほんとに親切な人が多いスレで感激しているよ。 頑張ってみる。ありがとう。
- 374 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:27:48 ]
- まだ出来てないのかよ。
- 375 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:32:36 ]
- >>373
>>357 をコピペして、適当なファイルに保存(ファイル名hoge)する。 $ chmod +x hoge $ ./hoge < hoge1.txt 2008.5.16 2008.5.18 2008.6.2 ここまで書かないとわからなかったのかな? パーミッションとか、リダイレクトとか、./ を付けることとか、、
- 376 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:36:14 ]
- パーミッションとかわからければ、テキストファイルとして保存して
$ sh hoge < hoge1.txt でいいし。
- 377 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/27(金) 10:47:21 ]
- >>375
できましたっ! みんな、ありがとう!
- 378 名前:名無しさん@お腹いっぱい。 [2008/06/28(土) 16:35:09 ]
- ホストをIPに変換するシェルを発行する時、
getentを使いたいのですが、getentって純正シェルでも使えましたっけ? あと、他にgetentが使えないシェルはありますか?
- 379 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 16:58:49 ]
- ホストの人かコンピューターをプロトコルに変換するシェルを開発されるスーパーハカーの方ですねわかります
- 380 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 17:48:26 ]
- >>378
外部コマンドならシェルの種類は関係ないでしょ。
- 381 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:18:22 ]
- zshではシェル関数になっていた > getent
- 382 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:21:22 ]
- それは俺の知らないzshだ
- 383 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:25:32 ]
- >>381
それは漏れの知らないzshだ
- 384 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:27:34 ]
- ashでは not foundって言われた > getent
- 385 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 18:31:13 ]
- /usr/share/zsh/4.2.6/functions/compaudit の中に
[[ -x /usr/bin/getent ]] || getent() { if [[ $2 = <-> ]]; then grep ":$2:[^:]*$" /etc/$1 else grep "^$2:" /etc/$1 fi } と書いてあった。コマンド実体がない場合にちょー簡略版を定義してるのね。
- 386 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 21:36:48 ]
- >>385
その定義だと、コロンで区切られてる前提になってるから、 passwdとgroupにしか使えないね。 (hostsには使えない)
- 387 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/28(土) 21:47:04 ]
- getent hostsって微妙だからな。
libresolv直接叩いているアプリも結構あるし。
- 388 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 03:08:38 ]
- 行中にIPアドレスらしき文字列が含まれていたら、それを出力するって
こんな感じで問題ないですかね? もっと綺麗に書ける気もするが・・・ # 1行に1つしか含まれてないと仮定して問題なしです。 text='0.0 192.168.0.1 0.0' regex='[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*' echo "$text" | grep "$regex" | sed -e "s/.*[^0-9]\($regex\).*[^0-9]*/\1/"
- 389 名前:388 mailto:sage [2008/06/29(日) 03:13:28 ]
- 全然ダメだったorz 教えてください。
- 390 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 03:30:41 ]
- echo $text | grep -E -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
-oなんてオプション他のgrepにあるか知らないけど
- 391 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:32:03 ]
- >>388
grepとsedを一緒に使うのは無駄。sedだけでできる。 sed '/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/'
- 392 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:34:43 ]
- すまん、-n p 忘れた。訂正。
sed -n '/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/p'
- 393 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:35:43 ]
- sed -n 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/p'
の間違いだろ。初心者はもっと謙虚なレスを書きなさい。
- 394 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:38:27 ]
- >>392
それだと頭の数字が食われることがある。 ↓ sed -n '/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/s//\1/p' とした方がいい。
- 395 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:40:50 ]
- だからぁ〜、sedはスレ違い。
>>393 は何を言いたいんだ? (392のあとで)
- 396 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:43:09 ]
- と言うか、>>393 の頭の 's/ の部分ですでにsed文法エラーじゃん。
初心者はちゃんと動作確認してから書きなさい。 >>394 が正解。
- 397 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:50:09 ]
- >>394 でも、
hoge123 192.168.123.45 みたいな入力があると失敗する。続きは sedスレでやってくれ。
- 398 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:52:24 ]
- sed -n '/.*\(\<[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\>\).*/s//\1/p'
で改善されるか?
- 399 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 09:54:07 ]
- 模範解答の発行まだー??
- 400 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 10:04:16 ]
- 398 で桶
- 401 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 21:24:06 ]
- sed -n 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/p'
- 402 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/29(日) 21:44:44 ]
- >>401
>>397 の指摘で失格
- 403 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/30(月) 01:27:41 ]
- よほどパフォーマンスに差がありでもしないかぎり、
書き易く読み易いようにすればいい。
- 404 名前:388 mailto:sage [2008/06/30(月) 01:39:46 ]
- みなさま色々とありがとうございました。
>>398 ちゃんと処理できるみたいですし、このスレでも良い評価なので これを使ってあげようかと思います。感謝してください。 この処理は、あるとても重要な国家プロジェクトで使用されます。 コメントで Powered by 398 と入れておきますね。
- 405 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/30(月) 01:59:48 ]
- なわけねーだろ
- 406 名前:名無しさん@お腹いっぱい。 [2008/07/02(水) 17:31:55 ]
- 誰かお願いします。
wk=f 配列にa b c d とそれぞれ入ってるとして ループでぐるぐるっと、wkと一致するものを探したいんですが、 もし一致するものが無かった場合の終了条件って、どうしたらいいですか。
- 407 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:41:16 ]
- 日本語でおk
- 408 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:42:11 ]
- 純正シェルに配列はない。配列に相当する別の処理をしているなら、
その処理方法を明示して質問し直した方がいい。
- 409 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:43:56 ]
- >>406
多少エスパーして回答。 ループにwhileを使うんじゃなくて、 forで配列の要素分ループすれば、たとえ一致するものが無かった場合でも ループはちゃんと終了するから問題なし。
- 410 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:48:51 ]
- ループの返り値ってことなら、breakとかを使わん限り最後のコマンドの実行結果になるから、
ループの最後にfalseを置いとけばいいんじゃないかね。 成功した場合はbreakで抜ける、ということならば、だけど。
- 411 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:51:11 ]
- >>406 の日本誤訳:
以下のようなシェルを発行しようとしたのですが、 もし一致するものが無かった場合、うまくいきません。 どうすればいいですか? #!/bin/bash wk=f array=(a b c d e) i=0 while [ ${array[i]} != $wk ]; do ((i++)) done
- 412 名前:名無しさん@お腹いっぱい。 [2008/07/02(水) 17:57:26 ]
- 皆様あざーっす!
とりあえず今、KSHって何だって事から教わりました。怒鳴り含み。 ちょっと参考にして、考えます。皆暖かいアドバイスども!
- 413 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 17:59:21 ]
- 突然何を言い出すんだ?
- 414 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 18:08:51 ]
- キチガイ警報
- 415 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 22:22:49 ]
- 作成したいファイル名が書かれたtxtのリストから、
ファイルを作成するにはどうすればよいでしょうか? たとえばテキストの中身に、 hoge foo bar とあったとして、 hogeとfooとbarというファイルを作成したいのです。
- 416 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 22:34:11 ]
- >>415
touch $(cat txt)
- 417 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/02(水) 22:46:52 ]
- >>416
なんでこれでできるのかわからないですができました ありがとうございます
- 418 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 02:22:28 ]
- >>416 それだと大量だった場合に引数溢れのエラーにならないかな?
- 419 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 02:25:14 ]
- >>418
じゃあ cat txt | xargs touch
- 420 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 03:05:13 ]
- cat txt|while read FNAME
do touch $FNAME done べたですがw
- 421 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:17:23 ]
- >>419
xargsは使っちゃいけないコマンド。 >>420 それだと catが無駄。touchがむだ。 while read FNAME do > "$FNAME" done < txt
- 422 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:19:13 ]
- >>416
bash依存、失格。 > `cat txt`
- 423 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:23:31 ]
- >>421
415とは関係ないんだけど パイプでxargsに渡すときに空白をエスケープするにはどうすればいいの 例えばfindで見つけたパスに空白が含まれてた場合とか
- 424 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:49:19 ]
- >>423 テンプレ>>6
- 425 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 07:55:01 ]
- >>424
テンプレにあったとは すいませんでした
- 426 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 08:02:10 ]
- テンプレにはないが、find -print0 | xargs -0 するんじゃなくて、
find -exec + するのが今後のお勧めだな。-exec の後ろ、\; じゃなくて + ね。 これでxargsは完全に不要!
- 427 名前:名無しさん@お腹いっぱい。 [2008/07/03(木) 11:31:21 ]
- 質問です。
case文でwhile文を使用する時 case "$a" in "a.c") while[ $flag = false || $i -ne 10 ] ; do 処理1 done の時、doneの跡に;;でおkですか?
- 428 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 11:56:24 ]
- >>421がFAだけど、敢えてxargs -0で。
cat list.txt | perl -ane '{ chop; printf("%s%c", $_, '\0'); }' | xargs -0 touch
- 429 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 11:57:44 ]
- >>426
この+でappendって、最近のfindはどれにもあるの?
- 430 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 11:58:53 ]
- 純正findにないから使っちゃだめ
- 431 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:18:04 ]
- >>430
純正findにもあるんだなぁ、+ が。よって find -exec + で FA。
- 432 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:31:00 ]
- xargs を使っちゃいけない理由キボンヌ
便利だし早いからコマンドラインで結構使うんですが・・・
- 433 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:31:12 ]
- 純正find にないのは -print0 の方ですね。
- 434 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:40:55 ]
- 純正なんとかっていう意味の曖昧な言い方は止めろ
今はPOSIX準拠かどうかの話をしてるようだが、 純正シェルは古い/bin/shの話だったりでわからん
- 435 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:45:23 ]
- >>432
$ printf "This is\na test.\n" This is a test. $ printf "This is\na test.\n" | xargs -n 1 echo This is a test. $ printf "This is\na test.\n" | perl -ane 'chop; printf("%s%c", $_, '\0');' | xargs -0 -n 1 echo This is a test. $
- 436 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 12:46:31 ]
- & >>6 (>>424は読んだ?)
- 437 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 13:03:20 ]
- >>435
なるほど、理解しますた。分かってれば使えないことはないですな。
- 438 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 16:40:13 ]
- まぁ実験して動いたらそれでまずOK。
でその後にリファイン(リファクタリング?) これが大事。
- 439 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 17:28:35 ]
- >>6
> (スペースなどを含むファイル名を正しく処理するため、 > findは -print0、xargsは -0オプションを常に付けることを推奨 > ただし、Solarisでは未対応。どうするんだろ?) $ cat print0 #! /bin/sh while read x; do printf "%s\0" "$x" done $ find 〜 | print0 | xargs -0 〜 でいいんじゃね? # printfは許してね。
- 440 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 18:16:12 ]
- >>439
いや、だから、Solarisでも find dir -exec hoge + が使えるんだよ。 よってprint0云々は一切不要。
- 441 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 18:21:41 ]
- >>439
ファイル名に \ が含まれていた場合、readが誤動作する(違うファイル名とみなされる) Solarisの xargsには -0 オプションがない。 で、>>440 の方法で解決。
- 442 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 18:58:56 ]
- トレースしてみた。
strace -f find /tmp -exec file {} + 2>&1 execve("/usr/bin/file", ["file"..., "/tmp"..., "/tmp/.ICE-unix"..., "/tmp/mysql.sock" ..., おお、すげぇ。ちゃんと引数まとめて実行してるね。 strace -f find /tmp -exec file {} \; 2>&1 execve("/usr/bin/file", ["file"..., "/tmp"...], [/* 21 vars */]) = 0 execve("/usr/bin/file", ["file"..., "/tmp/.ICE-unix"...], [/* 21 vars */]) = 0 execve("/usr/bin/file", ["file"..., "/tmp/mysql.sock"...], [/* 21 vars */]) = 0 こっちは1個ずつ実行するから大量だとクソ遅い。 勉強になりまつた。
- 443 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 19:55:30 ]
- やっぱ速さってみんな気になるん?
しっかりきっちり動けば、速度は問題ないって思ってる俺は未熟? いかにもベターってのはやらないけどー。
- 444 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 20:03:16 ]
- テクいことして読み難くなるなら多少遅くても分かりやすく書く
- 445 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 20:08:46 ]
- >>442
straceって、、Linuxかよw
- 446 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/03(木) 23:57:40 ]
- >>443
必要な時に必要なことをやる。当たり前のこと。 後の話はマ板でやって。
- 447 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 01:32:47 ]
- cronで毎日回しているプログラムの処理時間が
16時間越えたらちょっと悩む
- 448 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 08:05:24 ]
- kshでユーザIDのリストを計表にして印刷したいんだけど
こんなの作った人いますか? どこかにサンプルありませんかね。OSは、AIX5.3です。
- 449 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 08:27:34 ]
- >>448
計表の正確なところがわからんが、 while read user pass uid rest; do echo $uid $user ; done < /etc/passwd ってことか? あと、必要なら sort -n をかましてね。 kshじゃなくて純正シェルでできるよ。
- 450 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 08:29:48 ]
- >>448
あ、IFS設定抜けてた。 IFS=:; while read user pass uid rest; do echo $uid $user ; done < /etc/passwd
- 451 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 08:42:50 ]
- ksh -c lpr < /etc/passwd
- 452 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 11:13:09 ]
- FreeBSD 付属の wc は空白文字でパディングして結果を返すようです。
wc -l $file | sed "s/ /_/g" _____340_/usr/bin/g++ Linux では次のようにして 340 という値を得ていたのですが、 FreeBSD では空白文字が出力されてしまいます。 wc -l $file | cut -f1 -d" " FreeBSD 版 wc ではどうすればいいでしょう。 ltrim() みたいなものがありますかね。 それともいったん sh の変数に代入する? それとも wc や cut には未知のオプションがある? cut なんていう頑ななコマンドは使わないで、 sed 's/^ *\([0-9]*\) .*$/\1/' しろ? お前 awk '{ print $1 }' も書けないのか? bash をよく使うので、依存しているところがあったらごめんなさい。 awk はほとんど馴染みがありません。というか、 何かにつけて不遇の cut を使ってあげたい気持ちがあります…。
- 453 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 11:15:19 ]
- >>452
echo `wc -l < $file`
- 454 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 11:28:33 ]
- >>452
長文で cutを力説してるのに、 >>453 で cutすら必要ないというオチにワロタ wc で、引数じゃなくて標準入力の場合はもともとファイル名が出ないので cutとかで切る必要ないのと、スペースを取り除くにはシェルの ` ` を使うってことね。
- 455 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/07/04(金) 11:33:53 ]
- > それともいったん sh の変数に代入する?
質問者が用意した選択肢を誇らしげに答える>>453-454が憐れ。
|

|