08/07/04 11:50:48
>>456
いやいや、そうなんですよ。 cut ってつまり結局
他のコマンドと組み合わせるには中途半端なツールなんですよ。
単純でそれなりに覚えやすく、見込みのあるヤツだと思ってたんですが…
awk や bash は区切り文字を変えるだけでも結構タイプする印象が。
いや、変にこだわってごめんなさい。
460:名無しさん@お腹いっぱい。
08/07/04 12:06:44
つ awk -F:
461:名無しさん@お腹いっぱい。
08/07/04 15:50:34
cut はデリミタの連続を指定できれば使える君に化けるんだがな。
462:名無しさん@お腹いっぱい。
08/07/08 07:58:27
シェルスクリプトがCなどのプログラムより重い理由をうまく説明したいんですが
463:名無しさん@お腹いっぱい。
08/07/08 08:00:46
>>462
インタプリタ型言語だから。
(fork/execが遅いと言うだけが理由ではない。
内部コマンドだけを使ってもCよりも遅いから)
464:名無しさん@お腹いっぱい。
08/07/08 10:52:14
でも一番のボトルネックは fork, exec だと思うぞ
465:名無しさん@お腹いっぱい。
08/07/08 11:29:48
プロファイルしてみると分かるが、文字列処理も結構コストが高い。
stat(2)せずにls -lしてからパターンマッチなど。
shは文字列がグルーになっているから。
466:名無しさん@お腹いっぱい。
08/07/08 14:57:58
パイプとかバッククォートとかガンガン使うから、
それだけでシステムコール連発になっちゃうもんね。
文字列処理なのに write(2) とか使うわけだw
467:名無しさん@お腹いっぱい。
08/07/08 21:54:18
レスありがとう
ちなみにパイプでコマンドつないだ場合って一つ一つ最後まで処理して次のコマンドに移るであってますかね?
468:名無しさん@お腹いっぱい。
08/07/08 21:56:21
>>467
全然合ってない。それは MS-DOSのニセパイプの動作。
469:名無しさん@お腹いっぱい。
08/07/08 22:14:44
>>468
詳しくおしえてください・・・
470:名無しさん@お腹いっぱい。
08/07/08 22:21:27
>>469 シェル pipe dup2 とかで検索してみ。
471:名無しさん@お腹いっぱい。
08/07/08 22:50:12
そんな検索語じゃわかるわけないだろ。
pipe(2)だって無限にバッファがあって、
入口が閉じるまで出口から出て来ない仕様になってる可能性だってあるわけで。
472:名無しさん@お腹いっぱい。
08/07/08 23:22:32
無限の記憶装置は存在しないのでそんな可能性はゼロだな。
473:名無しさん@お腹いっぱい。
08/07/08 23:25:31
MS-DOSのパイプ仕様を実装することも不可能だな。
474:名無しさん@お腹いっぱい。
08/07/08 23:36:10
コマンド1 | コマンド2
本来のパイプだと、
コマンド1 の標準出力 = コマンド2の標準入力
になるような操作(dupとか)が裏で行われる。
コマンド1と2は同時に実行される。一時ファイルを介さない。
嘘パイプの場合は、
コマンド1 > 一時ファイル
コマンド2 < 一時ファイル
削除 一時ファイル
なだけ。
475:名無しさん@お腹いっぱい。
08/07/08 23:57:58
例えば
cat ばかでかいファイル | head -1
だとcatもheadも同時に起動してheadはcat の出力が1行分でたらそれを出力します
そのときcatの処理が途中だったらどうなるんですか?
476:名無しさん@お腹いっぱい。
08/07/09 00:11:11
やってみろよ
477:名無しさん@お腹いっぱい。
08/07/09 00:50:57
>>475
バッファってしってるか?
478:名無しさん@お腹いっぱい。
08/07/09 01:22:00
>>475
catがwrite(2)を呼び出したときにheadが終了している(パイプが閉じている)とSIGPIPEくらって終了。
479:名無しさん@お腹いっぱい。
08/07/09 02:16:51
そのshigpipeを発行するのはパイプさん?