我在目录中有文件列表,以数字结尾。如下:
play_football_3
play_football_4
play_football_5
play_football_15
play_football_59
我能够提取上述文件的最后一个数字。
echo "play_football_5" | cut -f3 -d"_"
现在,我正在尝试列出所有版本高于play_football_5的文件。
预期输出:
play_football_15
play_football_59
答案 0 :(得分:3)
您可以使用awk
:
printf "%s\n" play_football_* | awk -F_ '$3>5'
printf
将列出当前目录中以play_football_
开头的所有文件,并且awk
过滤数量大于5的文件
答案 1 :(得分:3)
如果您使用的是bash
2.02-alpha1或更高版本,则可以打开“扩展的globing ”并查找以play_football_
开头但不以数字0结尾的文件-5这样:
shopt -s extglob
ls play_football_!([0-5])
Here是开始学习更多内容的参考。
答案 2 :(得分:0)
答案 3 :(得分:0)
您还可以保留原始想法,例如:
for file in $(ls | cut -d_ -f3)
do
if [[ "$file" -gt 5 ]]
then
echo "play_football_$file"
fi
done
如果在包含文件的目录中执行此操作,则会得到:
play_football_15
play_football_59
答案 4 :(得分:0)
使用Perl单线版
> ll
total 0
-rw-r--r-- 1 xxxxxx devlgrp 0 Oct 30 14:41 play_football_5
-rw-r--r-- 1 xxxxxx devlgrp 0 Oct 30 14:41 play_football_4
-rw-r--r-- 1 xxxxxx devlgrp 0 Oct 30 14:41 play_football_3
-rw-r--r-- 1 xxxxxx devlgrp 0 Oct 30 14:41 play_football_15
-rw-r--r-- 1 xxxxxx devlgrp 0 Oct 30 14:41 play_football_59
> perl -ne ' BEGIN { @files=glob("play*");foreach(@files){ ($file=$_)=~s/.*_(\d+)/\1/g; print "$_\n" if $file > 5 } exit }'
play_football_15
play_football_59
>