|
>>4280 くま Solaris8iは手元にないので試していないですが、shで。 --------------------------- #!/bin/sh # デリミタを[,]に IFS=, # キーのリスト list="" # 計算 while read key value; do eval "if test -z \$array$key;then array$key=0; fi" eval \array$key=`eval "expr \\$array\$key + \$value"` list=$list,$key done < data.txt # 重複したキーを削除する clone=`echo "$list" | sed 's/^,//'` for key in $clone; do list=`echo "$list" | sed "s/$key//g" | sed 's/,[,]*/,/g'` list=$list,$key done # 表示 list=`echo "$list" | sed 's/^,//'` list=`echo "$list" | sed 's/,$//'` for key in $list; do echo -n $key, eval echo \$array$key done --------------------------- $ sh test.sh 001,60 002,5 003,35 004,100 --------------------------- 効率悪そうだ..。 |
|
>>4280 くま 以下ので出来ると思います。 ---------------------------------- #!/bin/sh nawk -F"," ' BEGIN { } function syukei() { total=0+0; no=$1; while (NF>0) { if (no == $1) { total = total + $2; } else { printf("%03d:%d\n",no,total); no=$1; total=$2; } getline; } printf("%03d:%d\n",no,total); } { if (NF == 0) next ; syukei() ; }' file.txt exit 0 |
|
続々と投稿されているので投稿してみます。 >>4280 くま awkなら、 $ nawk -F, '{v[$1]+=$2;}END{for(k in v) print k","v[k]}' data.txt | sort とできると思います。 /+ data.txt -> データファイル +/ |
|
>>4286 nagadomi nagadomiさんのコード凄いですね。 1行で実現してしまうなんて。 自分も、1行で実現できないかと試みてはみたのですが、良い案が浮かび ませんでした。 向学として教えていただきたいのですですが、 番号の比較、判断していませんが、何故、上手く出来ているのですか。 >'{v[$1]+=$2;}END{for(k in v) print k","v[k]}' 宜しくお願いします。 |