68user's page 掲示板

Prev< No. 4017〜4022> Next  [最新発言に戻る] [過去ログ一覧]
No. 4017 # さいさん 2004/10/26 (火) 20:42:17
duコマンドで、ディスクの使用率をバイトで表示しようと以下の
コマンドを実施したのですが、サイズとディレクトリ名との間に
改行が入り、一行で表示できません。
サイズとディレクトリ名を一行で表示し、その後、改行したいの
ですがどうすればよいですか。

5295104
        .
2594816
        ./tmp1
1864704
        ./tmp2
821248
        ./tmp3
10240
        ./tmp4
      

5295104 .
2594816 ./tmp1
1864704 ./tmp2
  821248 ./tmp3
    10240 ./tmp4

としたいのですが。

du -k $1 | sort -n -r | awk '{ system("echo "$1"*1024 | bc"); printf(" %s\n", $2) }'

No. 4018 # 68user 2004/10/26 (火) 21:05:45
>>4017 さいさん
> du -k $1 | sort -n -r | awk '{ system("echo "$1"*1024 | bc"); printf(" %s\n", $2) }'
改行コードが余分なわけなので
    du -k | sort -nr | awk '{ system("echo "$1"*1024 | bc | tr -d \\\\n"); printf(" %s\n", $2) }'
    du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'
とか。

わたしなら「わかりづらい」「無駄なプロセス生成が嫌」という理由から、
    du -k | sort -nr | awk '{ printf("%6d %s\n",$1*1024,$2)}'
などとします。

No. 4019 # さいさん 2004/10/26 (火) 23:04:36
>>4018 68user

>du -k | sort -nr | awk '{ printf("%10d %s\n",$1*1024,$2)}'
と最初はやっていたのですが、$1に設定されるブロックサイズが大きい
と「$1*1024」でオーバーフローを起こし、正しい計算ができないので
systemで、bcで計算をするようなことに

No. 4020 # NL 2004/10/26 (火) 23:08:07
>>4017 さいさん
>>4018 68user

>du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'

サーバとかOSのバーションとか記述されてませんでしたけど、
「echo -n」は、依存しませんでしたか。

No. 4021 # さいさん 2004/10/27 (水) 09:50:10
>>4107 68user

>>4018 68user
>du -k | sort -nr | awk '{ system("echo -n `echo "$1"*1024 | bc`"); printf(" %s\n", $2) }'

shかcshで異なるみたいです。

バークレイ版では、「\c」 エスケープを「-n」オプションで代用することができます。
echo が csh(1) の組み込み関数として用いられている場合には、バークレイ方式に
従っています。

#du -k $1 | sort -nr | awk '{ system("echo `echo "$1"*1024 | bc` \\\\c"); printf(" %s\n", $2) }'
で、できました。

No. 4022 # ken [URL] [E-mail] 2004/10/27 (水) 23:42:33
こんにちは

kenといいます。

Winsockを使ってネットワークの勉強してまして大変勉強になりました。
ソケットプログラミングを進めていくうちにどうしてもわからない点が発生
したので、もしよろしければとおもいメールしました。

問題はSend()/Recv()でパケットサイズを超えるデータを連続で
送受信させたいのです。
パケットを超える送信をするにはsend()の引数にバッファ、サイズを
そのままのっければ、自動でパケットサイズに切り分けて送信してる
のを確認しました。ですが、受信終了を示す返り値のlengs=0を受信
できませんでした。どうも送ってないようです。httpサーバーに接続して
受信をためしたのですが、lengs=0を確認でき連続で受信することができました。
recv()での受信lengs:0はシャットダウンを意味するとの記述も見つけたのですが、
shutdown()では送信復帰ができないので、使えません。

パケットサイズを超えるデータを連続で送信し受信する時、
受信データの終了を送信したり、受信するにはどうすればいいので
しょうか?
サーバーがファイルの終了を示すleng=0を送信するのは
なにか命令があるのでしょうか?
ソケットをシャットダウンするとleng=0を送信できますが
シャットダウンを復帰できないはずですがしてるのでしょうか?

よかったらレスお願いしますm(__)m
page:homepage3.nifty.com/MIDI-EDITOR/
mail:NQD00781@nifty.com
ken

Prev< No. 4017〜4022> Next  [最新発言に戻る] [過去ログ一覧]