数字文件名在shell中匹配

时间:2012-10-31 05:53:50

标签: linux shell

我有一堆文件,如:

0000
0100
0200
0300
0400
0500
0600
0700
0800
0900
1000
1100
1200
1300
1400

如果我指定输入8,如何匹配0800以下的文件?我在ubnutu上使用shell。

更新

对不起,也许我不清楚。

我有一个命令,它有一个参数用于指定一堆输入,例如tt ***。txt或rrr ???。txt。我想要的是指定那些低于0800的文件。

3 个答案:

答案 0 :(得分:1)

使用awk:

awk -v x=8 'BEGIN{x=sprintf("%04d",x*100);}$1<x' file

答案 1 :(得分:0)

Bash(假设这里是其他名称的文件)

c=0;
for file in [0-9][0-9][0-9][0-9];
    do 
       if [[ $file> 0800 ]];
       then 
           ((c++));
       fi;
     done;
echo $c;

如果此处超过4digit文件,则使用for file in [0-9][0-9][0-9][0-9]*;(它也可以获取0000aaaa :()等文件

答案 2 :(得分:0)

n=8
printf -v filename "%02d00" $n   # 0800
param='????'
for f in $param; do
    [[ $f > $filename ]] && continue
    # do something with $f
    echo $f
done

唯一的附带条件是注意将文件名与目标文件进行字符串比较而不是数字比较 - 默认情况下“0800”和“0900”将被视为八进制,当然它们是无效的八进制数字。如果要使用数字比较,请注意指定基数:

  

(( 10#$f > 10#$filename )) && continue