こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ディレクトリ内の全てのファイルの中身を操作したい

ディレクトリ内に、例えば10個のテキストファイル

a.txt b.txt c.txt d.txt e.txt f.txt g.txt h.txt i.txt j.txt

があり、その中身にそれぞれ

2 6 98 65 4 52 98 100 82 56

という数字が書かれているとします。

これらのファイルの中身の平均をawkを用いたコマンドで表示させたいのですが、自分なりに頑張ったのですが実行できませんでした。
(cat * | awk'{BEGIN{total += $0; i += 1}END{print total/i}' のような感じで)

どうすれば実行できるのか、よろしければお教えください。

投稿日時 - 2009-11-02 17:29:49

QNo.5416661

すぐに回答ほしいです

質問者が選んだベストアンサー

#1です。
幾つか想定外のことがあったようです。a.txtに幾つかの数字が書かれていて最終行も改行がある状況を考えていました。でも,例えば
a.txt
の内容が
2[EOF]
のようになっているのですね。それなら
awk '{total+=$1; i+=1;}END{print total/i}' *
で十分でしょう。

> コマンドが見つかりません

というのは
awkと'の間に空白がないせいかな?

投稿日時 - 2009-11-02 20:19:47

お礼

そうです、混乱させる書き方で申し訳ありません。

先ほど実行したところ、無事実行できました。
ご教授くださり、誠にありがとうございました。

投稿日時 - 2009-11-04 11:22:47

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

BEGIN{total += $0; i += 1}
これを
{for(j=1;j<=NF;j++) total+=$j; i+=NF;}
こんな感じにしてみたらどうかな。

投稿日時 - 2009-11-02 18:10:52

補足

教えていただいてありがとうございました。
(cat * | awk'BEGIN{for(j=1;j<=NF;j++) total+=$j; i+=NF;}END{print total/i}')
を実行したところ、「コマンドが見つかりません.」と表示されてしまいました。

(cat * )と打つと私の環境では(269865452981008256)と中身の数字が間隔を置かずに表示されてしまうので、それが原因なのでしょうか。

投稿日時 - 2009-11-02 18:31:16

あなたにオススメの質問