文字列をawkのintにキャストするメソッドを探しています。文字列比較をしているように見える次のものがあります
(note:フィールド$5
は、次の2つの形式のいずれかのパーセントです:80%
または9.0%
)
awk '{if (substr($5,1,(length($5)-1)) >= 90) ...
だから、私がそれを次のように変更すると:
awk '{if (substr($5,1,(length($5)-1))+0 >= 90+0 ) ...
思った通りです。これは適切なキャストですか?キャストを実行するための「より良い」方法はありますか?
+0だけを使用できます。変数v
はパーセント値です。
$ awk -v v="80.1%" 'BEGIN{print v+0.1}'
80.2
%
記号を取り除く必要はありません。
ほとんどの新しいawksにはint()関数があります。
しかし、 'Awkプログラミング言語'で文書化されているキャストの方法は、numericValueと+0
を使用して、実際のキャスト方法を示しています。この本は手元にありませんが、+0.0
を使用して浮動小数点値にキャストすることもできます。
これがお役に立てば幸いです。
docs によると、int(x)
はPOSIXに準拠しています。 (awkのすべての数値は浮動小数点であるため)数値は依然として浮動小数点数ですが、整数に切り捨てられます。
0を追加しても、文字列はintに変換されません。フロートに変換します。
The One True AWK に基づく古いawk
がある場合、 macOS awk
または FreeBSD awk
、マンページの下部に this が表示されます。
BUGS
There are no explicit conversions between numbers and strings. To force
an expression to be treated as a number add 0 to it; to force it to be
treated as a string concatenate "" to it.
The scope rules for variables in functions are a botch; the syntax is
worse.
式を強制的に数値として処理するには、それに0を追加します
浮動小数点数を気にせず、gawk
がある場合は、 strtonum
も使用できます
その他の情報源:
OS XバージョンのAWK、Brian Kernighanによる "The One True AWK"から派生
awk
の数値はすべて浮動小数点です。