Scripting 設計 小考 E
這個資料檔 qD.txt 是用 unzip -v
xxx.zip 指令查看一個壓縮檔內容的結果。 請分析這個資料檔,
分別:
- 按照年份統計該年度修改的所有檔案壓縮前的大小 (Length 欄位) 總和。 未壓縮的檔案 ("Stored") 不納入統計之列。
- 按照副檔名統計該副檔名的所有檔案壓縮前的大小 (Length 欄位) 總和。 未壓縮的檔案 ("Stored") 不納入統計之列。
penguin:~> ./qE < qE.txt
45281 00
26653 01
96782 02
734110 03
1299603 04
57864 99
2663 1
11174 4
1929 abw
4335 algotutor
4273 cgi
270 crd
8534 css
76431 fig
11920 gr
962 h
136819 htm
191042 html
108449 jpg
244 oss
21119 pdf
127775 php
303 phtml
26032 pl
117484 pm
239855 png
2558 ps
677886 shtml
307 svg
78717 txt
3252 xml
提示:
- 一次寫一點; 加一小個功能就測試一下; 無妨多印一些中間計算過程/除錯資訊。
- 把這兩句貼到你的迴圈內, 可以跳過不相關的資料列,
以免產生警告訊息:
my ($length, $method, undef, undef, $date, undef, undef, $name) = split " ", $_; next unless defined $name and $length =~ /^\d+$/; - 如果要搜尋的字串裡面含有
.應寫成\.若含有/應寫成\/ - 不需要排序。 不過要排序也很簡單: 用 sort 函數。
- 印出來的數字不需要對齊。 不過要對齊也很簡單:
printf "%8d %-1s\n", 數字, 字串;
建議每增加一點功能, 就測試一下, 就交上來; 不要一口氣寫很多再測試。 (除非你跟我一樣熟悉 perl)
- 讀一列, 印一列
- 跳過不相關的資料列, 且拆開每一列並印出 Length, Method, Date, Name 四個欄位。
- 跳過「未壓縮檔案」的資料列 ("Stored")
- Date 部分, 改只印年份
- 用 hash 統計並印出 「按照年份統計」 的結果
- Name 部分, 改只印副檔名。 提示: 以 "." 為分隔號, 拆開後的最後一個欄位, "大約" 就是副檔名。 例如 public_html/p/algotutor-0.6/doc/gen_at_graph.1.html 用 "." 拆開後, 不只兩段。
- 若沒有副檔名 (例如 public_html/l/mr/LDP), 或是副檔名內有 "/" (例如 public_html/p/algotutor-0.4/Math/Makefile) 這些都不應納入統計
- 用 hash 統計並印出 「按照副檔名統計」 的結果
![[rss feed 圖案]](/~ckhung//i/rss.png)
![[拒絕冏性升級 docx]](/~ckhung//i/n7/no-docx.png)
![[用創意換取注意力: 認識 CC 授權]](/~ckhung//i/cc.png)
![[(力求維持) 符合 xhtml 1.0]](/~ckhung//i/vxhtml10.png)
