2016-06-26 12 views
-1

IはこれにprintfAWK - である場合のprintf、前または内

printf ("%-6s\t%6.3f\n",msg,sum[msg]/count[msg]) 

配列を以下ている次のように異なるライン上

sum[$2] += $3 
count[$2]++ 

$2 = test1 $3 = 0 - 9ランダム

ifステートメントを実行して、sum[msg]またはcount[msg] == 0のいずれかが指定された場合、 -

私は次の操作を実行する必要がある場合はわからない:

if (count[msg] == 0 || sum[msg] == 0) { 
printf ("%-6s\t-\n",msg) 
} 

か、それは次のようにprintf内場合を置くことが可能である。また、

printf ("%-6s\t%6.3f\n",msg,if (count[msg] == 0 || sum[msg] == 0) {print -} else sum[msg]/count[msg]) 

実際の場合sum[$2] += $3に一致する行がありません。返されるのは0またはnull

すべての助けが大いに感謝します。

+1

私はすでにあなたの以前の質問でそれを行う方法を教えました。 http://stackoverflow.com/q/38023336/1745001の下の私のコメントを参照してください。 [あなたの最近の履歴](http://stackoverflow.com/users/3963654/glenn-lynam)では、数時間ごとに質問を投稿すると、あなた自身の問題を自分自身で解決しようとすることに少しでも取り組んでいるようです。あなたが与えられている解決策を理解しようとする代わりに、あなたが何かを打つたびに新しい質問をすぐに投稿して、数秒間考えなければならないかもしれません。 Arnold Robbins著、Effective Awk Programming、第4版を読んでください。 –

+0

@エドモートン私は、問題について数時間を過ごしています。私は常に[GNU AWK](https://www.gnu.org/software/gawk/manual/html_node/index)を参照/チェックしています。 html)。私は「awk」には比較的新しいと思っています。私はすべてのことをよく理解しているわけではありませんが、あなたのコメントに関しては、私はすでにあなたに言っていました。 。私が質問を投稿する前に、私が以前投稿したすべての質問に行きます。私がしようとしているのは、stackoverflow.com/q/38023336/1745001への解決策として「先導0」とは関係ありません。ありました。 – glly

+1

もう一度見てください。私がhttp://stackoverflow.com/q/38023336のコメントの中で思い出させたように、私がhttp://stackoverflow.com/q/38020217/1745001に提供した解決策は、配列を取り込むときに先頭のゼロを '+ 0'で処理します/ 1745001だから、あなたはその質問をする必要はありませんでした。また、私はあなたにこう言っています。「ゼロ除算から身を守る一般的な方法は、print(denom?num/denom: NaN ")'またはそれに類するもの。あなたが今質問している特定の質問に対する解決策です。本を読んで基礎を築くと、あなたは疑問に思ったり尋ねたりするのにあまり時間を費やすことはありません。 –

答えて

2
printf "%-6s\t%s\n",msg,(sum[msg]*count[msg]?sprintf("%6.3f",sum[msg]/count[msg]):"-") 

しかし、あなたが助けを方法のあらゆるステップを求めて維持する必要はありませんので、基礎を得るために、アーノルドロビンスによって、ブック効果的なawkのプログラミング、第4版を読んで行ってください。

+0

'sum [msg] * count [msg]'が '0'かどうかを確認していることを確認できますか? – glly

+0

それは正しいです。 –

関連する問題