1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<code>網上看到一道題,内容如下。</code>
<code>123456 23 1000</code>
<code>234567 34 1234</code>
<code>345678 21 1234</code>
<code>456789 45 4532</code>
<code>234567 34 1233</code>
<code>345678 21 3445</code>
<code>其中第一列為ID号 第二列為級别 第三列為時間</code>
<code>題目要求,寫一個腳本處理文本,處理結果為</code>
<code>第一列顯示ID</code>
<code>第二列過濾級别<30或者級别>40</code>
<code>第三列顯示内容為,若為相同的ID号,計算時間之和</code>
總覺得這個題目有點問題,資料有點不對應,不多說了,直接上代碼
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<code>#!/bin/env perl</code>
<code># -*- coding: utf-8 -*-</code>
<code>use</code> <code>strict;</code>
<code>my</code> <code>%hash</code><code>;</code>
<code>while</code> <code>(<DATA>) {</code>
<code> </code><code>chomp</code><code>;</code>
<code> </code><code>next</code> <code>if</code> <code>/^$|^</code><code>#/;</code>
<code> </code><code>my</code> <code>@array</code> <code>= </code><code>split</code><code>;</code>
<code> </code><code>if</code> <code>(</code><code>$array</code><code>[1] < 30 || </code><code>$array</code><code>[1] > 40) {</code>
<code> </code><code>push</code> <code>@{</code><code>$hash</code><code>{</code><code>"$array[0]\t$array[1]\t"</code><code>}},</code><code>$array</code><code>[2];</code>
<code> </code><code>}</code>
<code>}</code>
<code>for</code> <code>my</code> <code>$num</code> <code>(</code><code>sort</code> <code>keys</code> <code>%hash</code><code>) {</code>
<code> </code><code>my</code> <code>@a</code> <code>= @{</code><code>$hash</code><code>{</code><code>$num</code><code>}};</code>
<code> </code><code>printf</code> <code>"%d"</code><code>,</code><code>$num</code><code>;</code>
<code> </code><code>printf</code> <code>sum(\</code><code>@a</code><code>);</code>
<code> </code><code>printf</code> <code>"\n"</code><code>;</code>
<code>sub</code> <code>sum {</code>
<code> </code><code>my</code> <code>(</code><code>$ref</code><code>) = </code><code>@_</code><code>;</code>
<code> </code><code>my</code> <code>$i</code> <code>= 0;</code>
<code> </code><code>for</code> <code>(@</code><code>$ref</code><code>) {</code>
<code> </code><code>$i</code> <code>+= </code><code>$_</code><code>;</code>
<code> </code><code>}</code>
<code> </code><code>return</code> <code>$i</code><code>;</code>
<code>__DATA__</code>
運作結果:
<code>123456 23 1000</code>
<code>345678 21 4679</code>
<code>456789 45 4532</code>
<code></code>
本文轉自dongfang_09859 51CTO部落格,原文連結:http://blog.51cto.com/hellosa/1554779,如需轉載請自行聯系原作者