Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

awkで標準出力に表示された数値を数値型で扱う3つの方法

ゼロ加算

awk界隈ではよく見かける方法です。
printf記法、print記法共に16進数は予定通り動いてくれないので注意が必要です。

$ echo 123 0x123 | gawk '{print $1+0, $2+0}'
123 0

$ echo 123 0x123 | gawk '{printf "%d %d\n", $1+0, $2+0}'
123 0

strtonum関数

異分野から入った人間にとって、挙動を読みやすい方法です。
ゼロ加算と違って、16進数もヨロシク扱ってくれます。有能。

$ echo 123 0x123 | gawk '{printf "%d %d\n", strtonum($1), strtonum($2)}'
123 291

(非推奨)non-decimal-dataオプション

誘拐犯の要求が差し迫ったものになった場合、止むを得ず使う方法です。
shbangとの合わせ技で使う事もあるのかも知れませんが……少なくとも、後方互換性の関係で参考もとは推奨していません。
使う場合は自己責任で

$ echo 123 0x123 | gawk --non-decimal-data '{printf "%d %d\n", $1, $2}'
123 291

参考もと

  • effective awk