Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

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