next up previous contents
Next: Shell Scripts Up: awk 工具 Previous: awk 與正規表示法   Contents   DYWANG_HOME

實機練習題

  1. 共同要求:
    1. 在家目錄下建立 zzz 目錄。
    2. 切換工作目錄到 zzz,所有練習腳本皆存在此目錄。
    3. 腳本必須可執行。
  2. 下載檔案 awk-a.csv,以 awk 處理 awk-a.csv 檔,第一欄位 no,第二欄位 name,第三欄位是 score1,第四欄位是 score2,第五欄位是 grade,撰寫以下腳本:
    1. awk-a1.sh:計算 awk-a.csv 檔中所有學生的 score1 平均分數及 score2 的平均分數,輸出只列出所有學生 score1 平均分數及所有學生 score2 的平均分數,中間用 TAB 隔開,存成 awk-a1.txt。
    2. awk-a2.sh:計算 awk-a.csv 檔中學生的 score1 及 score2 的平均分數,列出「目前處理第幾行 TAB 姓名 TAB 目前score1平均 TAB 目前score2平均」,存成 awk-a2.txt。
    3. awk-a3.sh:找到 no 大於 10 的學生,列印「目前處理第幾行 TAB grade TAB 姓名 TAB score1與score2平均值」,存成 awk-a3.txt。
    4. awk-a4.sh:配合正規表示式找到名字是 r 開頭的學生,列印「目前處理第幾行 TAB grade TAB 姓名 TAB score1與score2平均值」,存成 awk-a4.txt。
  3. 下載檔案 awk-b.csv,以 awk 處理 awk-b.csv 檔,第一行是各欄位名稱,不算筆數而且必須特別處理,撰寫以下腳本:
    1. awk-b1.sh:計算 awk-b.csv 檔中學生的 score1 及 score2 的平均分數,只列出 score1 及 score2 的平均分數,中間用 TAB 隔開,第一行列印「平均一 TAB 平均二」,存成 awk-b1.txt。
    2. awk-b2.sh:計算 awk-b.csv 檔中學生的 score1 及 score2 的平均分數,列出「目前筆數 TAB 姓名 TAB 目前score1平均 TAB 目前score2平均」,第一行列出「筆數 TAB 姓名 TAB 累計平均1 TAB 累計平均2」,存成 awk-b2.txt。
    3. awk-b3.sh:找到 no 大於 10 的學生,列印「目前筆數 TAB grade TAB 姓名 TAB score1與score2平均值」,第一行列出「筆數 TAB 成績 TAB 姓名 TAB 兩科平均」,存成 awk-b3.txt。
    4. awk-b4.sh:配合正規表示式找到名字是 r 開頭的學生,列印「目前筆數 TAB grade TAB 姓名 TAB score1與score2平均值」,第一行列出「筆數 TAB 成績 TAB 姓名 TAB 兩科平均」,存成 awk-b4.txt。
  4. 下載檔案 passwd,以 awk 處理 passwd 檔,passwd 檔的以冒號 ":" 分隔欄位,撰寫以下腳本:
    1. passwd1.sh:列印第 1 及 3 欄位,中間以 TAB 分隔,存成 passwd1.txt。
    2. passwd2.sh:列出 UID 大於 10 且小於 100 的帳號,印出格式為「目前處理的行數 TAB 帳號名稱 TAB UID TAB 該行有多少欄位」,存成 passwd2.txt。
    3. passwd3.sh:查閱第 3 欄位小於 7 以下的數據,並且僅列出第 3, 1, 5 欄位,中間以 TAB 分隔,但是分隔符號的設定必須在 awk 程式本身,而不是使用 -F 選項,觀察其第一行輸出,存成 passwd3.txt。
    4. passwd4.sh:同上題,但利用關鍵字 BEGIN 讓第一行正確顯示,存成 passwd4.txt。
    5. passwd5.sh:將 passwd4.sh 的 awk 程式寫在 passwd5.awk,passwd5.sh 以 awk -f 選項指定執行 passwd.awk 完成上一題的要求,結果存成 passwd5.txt。


De-Yu Wang 2020-05-22