列出高于特定编号的数字文件

时间:2018-10-30 07:46:22

标签: bash shell awk grep

我在目录中有文件列表,以数字结尾。如下:

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

5 个答案:

答案 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)

您可以使用

awk -F'_' '$3 > 5'

请参见online awk demo

使用-F'_',将定界符设置为下划线,使用'$3 > 5',仅打印第三行大于5的那些行(记录)。

答案 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
>