• 締切済み

[Kシェル] ファイル読み込み

最近Kシェルを始めたばかりでつまづいています。 あるログファイルの行を取得して、 その行のn番目の値を合算したいです。 例:ログファイルの中身 1,1000,AAAA,10000, 2,1000,EEEE,1000, 3,1005,CCCC,1050, ※上記で4番目を合算する場合、  12050と出力したいです。 以前Cシェルを使用していたので、 foreachのような動きを考えていたのですが、 参考書を見ると効率的でない(readを使う) という記載がされています。 ログが数万行に達する可能性があるので、 効率的なやりかたを模索していますが、 何かよい方法がありますでしょうか。 よろしくお願いいたします。

みんなの回答

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

こんばんは。恐らく IFS(Internal Field Separator)との 合わせ技でしょう。awk の -F, と同じくフィールドの区切りを コンマにするという意味です。 IFS=',' result=0 while read a b c d e; do ((result = result + d)) # let "result = result + d" done < logfile IFS=' ' # 最後は元に戻す echo $result # 12050 IFS の働きで logfile の中の各フィールドが a, b, c, d, e(最後は空)の各変数に収められます。 awk に比べて本当に速いのかどうかわかりませんが。

参考URL:
http://news.software.ibm.com/doc_link/Ja_JP/a_doc_lib/cmds/aixcmds4/read.htm#HDRA143C17A0
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

awkを使うのはダメですか awk -F, '{sum+=$4;} END{print sum;}' log.txt

関連するQ&A