天天看點

perl的魅力

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>第二列過濾級别&lt;30或者級别&gt;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>(&lt;DATA&gt;) {</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] &lt; 30 || </code><code>$array</code><code>[1] &gt; 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,如需轉載請自行聯系原作者