2013-03-31 48 views
1

的最後一行給出一個輸出這樣的最後一個字段:Perl的殼狀的襯墊:採摘標準輸入

-rw-r--r-- 1 tinosino staff 4.0K 21 Mar 2012 EtcHosts_Backup_2012-03-21_21-19-10.txt 
-rw-r--r-- 1 tinosino staff 3.8K 1 Apr 2012 EtcHosts_Backup_2012-04-01_01-06-12.txt 
-rw-r--r-- 1 tinosino staff 3.9K 18 Jun 2012 EtcHosts_Backup_2012-06-18_18-33-40.txt 
-rw-r--r-- 1 tinosino staff 3.9K 27 Aug 2012 EtcHosts_Backup_2012-08-27_09-37-44.txt 

我想獲得最後一行的最後一個字段(文件名)(27 8月),基本上是:

EtcHosts_Backup_2012-08-27_09-37-44.txt 

我感興趣的是如何最好地做到這一點的perl

如果有更好的方法來做到這一點只是ls,這不是我在找什麼(我知道我可以按日期排序,創建,修改等,我可以-1t只顯示文件名)

這基本上是學習如何做perl我一般做awk

ll | tail -n 1 | awk '{print $NF}' 

,並提供:

EtcHosts_Backup_2012-08-27_09-37-44.txt 

這是「理想的答案」。

這裏我嘗試:

ll | perl -lane 'eof() && print $F[$#F]' 

我能在這個面目可憎的一塊..˚F改善? $F[$#F]

答案「似乎是正確的」,但得到的方式$ NF顯得原始。

回答

1

改進:

perl -lane 'eof() && print $F[-1]' # or ... 
perl -lane 'eof() && print pop @F' 

另外:

perl -lane 'END { print $F[-1] }' # or... 
perl -lane 'END { print pop @F }' 

,當然還有,爲什麼不乾脆:

ls | tail -1 
+0

謝謝!我**愛**'印刷流行@ F'!當然不是'ls |尾巴-1',因爲我_did_說這只是一個學習'$ NF'的'perl'的例子。很好的答案! – Robottinosino

1

爲了回答您的具體問題關於改善上$F[$#F],Perl的支持使用負數作爲數組索引。例如,-1表示列表的最後一個元素,那麼你還可以編寫一行代碼爲:

ll | perl -lane 'eof() && print $F[-1]'