トラック
/
AWK
AWK
/
演習
/
シンプルなレポート
シンプルなレポート

シンプルなレポート

学習演習

はじめに

数値と文字列

AWKはとても小さな言語で、基本的なデータ型もわずかしかありません。 このレッスンでは、数値と文字列について見ていきます。

数値

AWKの数値は、倍精度浮動小数点数として実装されています。 整数、小数、倍精度浮動小数点数の間に区別はありません。

AWKは8進数の定数(0で始まるもの)と16進数の定数(0xまたは0Xで始まるもの)を理解します。

数値の演算

標準的な算術演算子である+、-、*、/、%を使えます。 べき乗の演算子は^です。 組み込みの数値関数もいくつかあり、三角関数や乱数生成、数値を_x_と0の間で最も近い整数に切り捨てるint(x)などがあります。

文字列

AWKの文字列は、文字の並びです。 文字列の定数は、二重引用符で囲んで指定します。

文字列の操作

文字列の操作は、連結の1つだけです。 連結には専用の演算子はありません。2つの文字列を並べるだけで、それらは連結されます。

BEGIN {
    hw = "Hello" "World"
    print hw
}
# => HelloWorld
Note

printは文であって、関数ではありません。 printに括弧(())は必要ありません。

AWKには、文字列を操作するための関数が豊富に用意されています。 これらについては、トラックを進めていく中で詳しく紹介していきます。

数値と文字列の変換

数値と文字列を変換する明示的な演算子はありません。 AWKは、プログラムの文脈に応じてこれを暗黙的に行います。 そのため、入力フィールドの値を扱うのはとても簡単です。AWKはたいてい、こちらが望んだとおりに動いてくれます。

  • print x + yは、+の数値演算のおかげで、xとyの変数の値を数値に変換します。
  • print x yは、連結の操作によって、xとyの変数の値を文字列に変換します。

明示的に行いたい場合は、0 + xで_x_の数値としての表現が得られ、"" xで_x_の文字列としての表現が得られます。

文字列から数値へ

AWKが文字列を数値に変換する方法は、戸惑うこともあるかもしれません。 簡単に言うと、AWKは文字列の先頭から「数値の文字」を読み進め、数値ではない文字が見つかったところで止まります。 いくつか例を挙げます。

  • "2.5"は数値の2.5に変換されます。
  • "1e3"は数値の1000に変換されます(指数表記)。
  • "456abc"は数値の456に変換されます(aは数値ではないため、そこで変換が止まります)。
  • "abc789"は数値の0に変換されます(文字列の先頭に数字がないためです)。

説明

友人が庭のあちこちで取った測定値からレポートを作成するのを手伝っています。 残念ながら、友人はそのデータを奇妙な形式で保存していました。 それぞれの測定値は、カンマで区切られた複数のフィールドの集まりです。 ただし、2桁の数値は2つの列に分けて保存されています。

フィールド番号 意味
1 ID番号
2 場所
3 1つ目の測定値の十の位
4 1つ目の測定値の一の位
5 2つ目の測定値の十の位
6 2つ目の測定値の一の位

101,house,4,2,5,4のような入力行なら、

  • 1つ目の測定値は42、
  • 2つ目の測定値は54です。

タスク1:レポートを作成する

2つの測定値の平均を求め、各行の結果を次の形式で出力します。

#<id>, <label> = <average>

42と54の平均は48なので、この例の行の出力は次のようになります。

#101, house = 48
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
AWK Exercism

シンプルなレポートを始める準備はできましたか?

Exercismに登録すれば、3個のコンセプト92個の演習、そして本物の人間によるメンタリングとともに、AWKを学んでマスターできます。すべて無料です。