學習軌道
/
AWK
AWK
/
練習
/
簡單報表
簡單報表

簡單報表

學習練習

簡介

數字與字串

AWK 是一門非常精簡的程式語言,只有少數幾種基本資料型態。 在這個單元裡,我們會一起看看數字和字串。

數字

AWK 的數字是以雙精度浮點數實作的。 整數、浮點數和雙精度浮點數之間沒有區別。

AWK 看得懂八進位數字常數(以0開頭)與十六進位數字常數(以0x或0X開頭)。

數值運算

你可以使用標準的算術運算子 +、-、*、/、%。 指數運算子是 ^。 AWK 也有一些內建的數值函式,包括三角函式、隨機數字產生,以及用來把數字截斷成 x 與零之間最接近整數的 int(x)。

字串

AWK 的字串是由字元組成的序列。 使用雙引號來指定字串常數。

字串運算

字串運算只有一種:串接。 串接沒有專屬的運算子; 只要把兩個字串並排放在一起,就會將它們串接起來:

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(字串的開頭沒有數字)。

說明

你正在幫一位朋友,把他從花園各個角落收集到的讀數整理成一份報告。 可惜的是,你朋友把資料存成了一種奇怪的格式。 每一筆讀數都是一組以逗號分隔的欄位。 不過,他把兩位數拆成兩個欄位來儲存。

欄位編號 意義
1 識別碼
2 位置
3 第一筆讀數的十位數
4 第一筆讀數的個位數
5 第二筆讀數的十位數
6 第二筆讀數的個位數

以101,house,4,2,5,4這樣的輸入列為例:

  • 第一筆讀數是42,
  • 第二筆讀數是54。

任務 1:產生報告

你的任務是算出兩筆讀數的平均值,並以下列格式輸出每一列的結果:

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

由於 42 和 54 的平均值是 48,範例列的輸出應該會是:

#101, house = 48
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
AWK Exercism

準備好開始 簡單報表 了嗎?

註冊 Exercism,透過 3 個概念92 個練習 和真人引導來學習並精通 AWK,全部免費。