2013-07-09 37 views
-4

返回首行我有這個數據的文件:的Perl:如何從文件


elapsed_time   disk_reads   sqlid 

2   316   c1532tkq9mc0md5 

1   0  lwabizjrfgcnkt1bb5k 

1   240   jusnum7hy4 

0   5  s69t8ze3rtuxik9s4 

0   0  w4la6it246coqfqa 

33   0  18wpwk3ync5c 

0   0  8lhgyx4z43xk5dl4y7z 

0   0  hqbhyibw94ns06mhrbz 

30   0  ruu3oacuq1bjzo 

20   0  vbk1zfvmk187 

2   316   ll1ultl7ttpikuzqo9j 

1   0  ftc6ix6lahetwsxfo 

我想在Perl返回與TOP經過時間的3條線:

30   0  ruu3oacuq1bjzo 

20   0  vbk1zfvmk187 

33   0  18wpwk3ync5c 

有人可以幫我嗎?

+1

是否必須是Perl的? 'sort -g |尾巴3「可以很容易地做到這一點。 – RobEarl

+0

所有的空行都是故意的嗎? – innaM

+1

投票結束:任何閱讀過任何學習Perl書籍的前幾章的人都會明白這個解決方案。我不是一個通常尖叫*** RTFM!***的人,但這確實是非常基本的Perl東西。 –

回答

1

讀取所有線路,通過各種經過時間降序,並打印前三,

perl -ne '/^(\d+)/ or next;push @r,[$_,$1] }{ print map { ($i++ < 3) ? $$_[0]:() } sort{$$b[1]<=>$$a[1]} @r' file