- 締切済み
[Kシェル] ファイル読み込み
最近Kシェルを始めたばかりでつまづいています。 あるログファイルの行を取得して、 その行のn番目の値を合算したいです。 例:ログファイルの中身 1,1000,AAAA,10000, 2,1000,EEEE,1000, 3,1005,CCCC,1050, ※上記で4番目を合算する場合、 12050と出力したいです。 以前Cシェルを使用していたので、 foreachのような動きを考えていたのですが、 参考書を見ると効率的でない(readを使う) という記載がされています。 ログが数万行に達する可能性があるので、 効率的なやりかたを模索していますが、 何かよい方法がありますでしょうか。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 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 に比べて本当に速いのかどうかわかりませんが。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.1
awkを使うのはダメですか awk -F, '{sum+=$4;} END{print sum;}' log.txt