我在UNIX服务器上有一些文件,它们的名称类似于abc_ 250 -00.txt。 现在,我要列出大于X但小于Y的文件。
例如:- 下面是文件列表
abc_**100**-00.txt
xyz_**101**-000.txt
abc_**200**-00.txt
xyz_**201**-000.txt
abc_**250**-00.txt
xyz_**290**-000.txt
abc_**300**-00.txt
xyz_**350**-000.txt
我需要大于XXX_ 201 -xx.txt但小于XXX_ 300 -xx.txt的文件列表的结果。
abc_ 250 -00.txt
xyz_ 290 -000.txt
我尝试过ls并与awk结合使用,但是我没有得到正确的结果。
非常感谢您的帮助。谢谢!
答案 0 :(得分:1)
awk
来营救!
$ ls *.txt | awk -F[-_] '201<$2 && $2<300'
abc_250-00.txt
xyz_290-000.txt
如果您不想包含其他文件,则可以将ls
限制为ls *_[0-9][0-9][0-9]-00*.txt
答案 1 :(得分:0)
不需要子shell。
echo "abc_100-00.txt
xyz_101-000.txt
abc_200-00.txt
xyz_201-000.txt
abc_250-00.txt
xyz_290-000.txt
abc_300-00.txt
xyz_350-000.txt" |
while read -f f
do n=${f#???_}
n=${n%-*}
if (( n < 300 )) && (( n > 201 ))
then echo $f
fi
done
不过,awk
可能会更快。 :)
答案 2 :(得分:0)
给出:
$ ls -1
abc_**100**-00.txt
abc_**200**-00.txt
abc_**250**-00.txt
abc_**300**-00.txt
xyz_**101**-000.txt
xyz_**201**-000.txt
xyz_**290**-000.txt
xyz_**350**-000.txt
您可以使用Perl:
$ ls -1 | perl -lnE 'say if (m/(?<=\*)(\d{3})(?=\*)/ && 201<$1 && $1<300)'
abc_**250**-00.txt
xyz_**290**-000.txt