给出如下输出:
-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 Aug)的最后一个字段(文件名),基本上:
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的方法似乎是原始的。
改进:
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
为了回答您关于改进$F[$#F]
的具体问题,Perl支持使用负数作为数组索引。例如,-1表示列表的最后一个元素,因此您可以将一行代码写成:
ll | perl -lane 'eof() && print $F[-1]'