perl一行脚本用路径获取最后一条记录

时间:2012-03-09 19:29:02

标签: perl

有人可以用perl one liner帮助我获得以下内容吗?它必须是perl。

drwxr-x---   - abc_grid abc_fltr          0 2012-02-05 23:24 /samples/abc/accounts/filtered/20120204
drwxr-x---   - abc_grid abc_fltr          0 2012-02-12 14:31 /samples/abc/accounts/filtered/20120211
drwxr-x---   - abc_grid abc_fltr          0 2012-02-19 14:31 /samples/abc/accounts/filtered/20120218
drwxr-x---   - abc_grid abc_fltr          0 2012-02-29 00:24 /samples/abc/accounts/filtered/20120225
drwxr-x---   - abc_grid abc_fltr          0 2012-03-05 11:36 /samples/abc/accounts/filtered/20120303

我想要最后一条记录和路径。

/samples/abc/accounts/filtered/20120303

5 个答案:

答案 0 :(得分:3)

ls -l|perl -lane 'END{print $F[-1]}'

答案 1 :(得分:3)

如果我们打高尔夫球,那么

ls -l|perl -lane 'END{print $F[-1]}'

可以缩短为

ls -l|perl -lane'END{print$F[-1]}'
ls -l|perl -lane'}{print$F[-1]'
ls -l|perl -lane}{print\$F[-1]
ls -l|perl -anE}{say\$F[-1]

这是一个不使用ls的ungolfed解决方案。无论如何,这种方式更可靠。

perl -E'say(( sort { -M $a <=> -M $b } @ARGV )[0])' \
    /samples/abc/accounts/filtered/*

参考:-M

答案 2 :(得分:2)

perl -ne 's/^.* //; $last = $_; END { print $last; }'

答案 3 :(得分:2)

perlrun -a

   ls -l | tail -1 | perl -lane 'print $F[-1]'

答案 4 :(得分:1)

我在这里假设你想要的是/ samples / abc / accounts / filtered目录中最近修改过的文件的完全限定路径名。这与你上面的例子有关。如果不对,请随意纠正我。

使用“纯Perl”限制,您可以使用...

perl -e '$d="/samples/abc/accounts/filtered";print +(sort { -M "$a" <=> -M "$b" } glob("${d}/*"))[0], "\n"'

但我认为在这种情况下我只是使用shell ...

ls -1dt /samples/abc/accounts/filtered/* | tail -1