将今天的日期视为24/02/14
我在提及目录“/ apps_kplus / KplusOpenReport / crs_scripts / rconvysya”中设置了文件,文件名为
INTTRADIVBMM20142402
INTTRADIVBFX20142402
INTTRADIVBFI20142402
INTTRADIVBDE20142402
INTPOSIVBIR20142402
INTPOSIVBIR20142302
INTTRADIVBDE20142302
INTTRADIVBFI20142302
INTTRADIVBFX20142302
INTTRADIVBMM20142302
我想用当前日期计算文件数。因为我正在使用以下查询
#! /bin/bash
tm=$(date +%y%d%m)
x=$(ls /apps_kplus/KplusOpenReport/crs_scripts/rconvysya/INT*$tm.txt 2>/dev/null | wc -l)
if [ $x -eq 5 ]
then
exit 4
else
exit 3
fi
但没有得到理想的输出。 有什么不对。
答案 0 :(得分:0)
您正在搜索扩展名为.txt的文件,而您列出的文件则没有。如果从路径名中删除.txt
,则可以正常工作。
答案 1 :(得分:0)
您可以尝试以下awk
:
awk -v d="$date" '{split(d,ary,/\//);if($0~"20"ary[3]ary[1]ary[2]) cnt++}END{print cnt}' file
其中$date
是包含您要搜索的date
的shell变量。
$ cat file
INTTRADIVBMM20142402
INTTRADIVBFX20142402
INTTRADIVBFI20142402
INTTRADIVBDE20142402
INTPOSIVBIR20142402
INTPOSIVBIR20142302
INTTRADIVBDE20142302
INTTRADIVBFI20142302
INTTRADIVBFX20142302
INTTRADIVBMM20142302
$ awk -v d="$date" '{split(d,ary,/\//);if($0~"20"ary[3]ary[1]ary[2]) cnt++}END{print cnt}' file
5
答案 2 :(得分:0)
使用Awk,一切皆有可能!
tm=$(date +%Y%d%m) # Capital Y is for the four digit year!
ls -a | awk -v tm=$tm '$0 ~ tm' | wc -l
这是伟大而可怕的Awk命令。 (在充满敬畏和星巴克咖啡)中都很可怕。
-v
参数允许我设置Awk变量。 $0
表示整行,它是ls
命令的文件名。 $0 ~ tm
表示我正在查找包含您指定的时间字符串的文件。
我也可以这样做:
ls -a | awk "/$tm\$/"
让shell将$tm
插入到Awk程序中。这仅查找以$tm
戳记结尾的文件。 /.../
本身意味着匹配整行。这是比我之前更短的Awk快捷方式。另外,它确保您只匹配文件末尾的时间戳。
答案 3 :(得分:0)
ls /apps_kplus/KplusOpenReport/crs_scripts/rconvysya | grep "`date +%Y%m%d`"| wc -l
这对我有用,它似乎是最简单的解决方案,我希望它符合您的需求
如果存在0k文件,要获得退出状态4,请使用以下代码:
0=`ls /apps_kplus/KplusOpenReport/crs_scripts/rconvysya | grep "`date +%Y%m%d`"| xargs -n 1 stat -c%s | grep "^0$" | wc -l`
if [ "$0" -eq "0" ]
then
exit 4
else
exit 3
fi