#!/bin/bash
DATE=`date +%Y-%m-%d`
HOUR=`date +%H`
ORDERS_THIS_HOUR=`cat cli.log | grep $DATE $HOUR | grep -o "generated for Production" | wc -l`
OUTPUT="$DATE $HOUR : $ORDERS_THIS_HOUR"
echo "$OUTPUT" >> flow_productivity.log
问题出在第二行:grep: 14: No such file or directory
.
这是一个示例命令,我想将其结果存储在$ORDERS_THIS_HOUR
:
cat cli.log | grep "2019-02-13 12" | grep -o "generated for Production" | wc -l
从命令行运行,上面产生了预期的输出。
首先——因为你没有在扩展周围加上引号,它们作为单独的参数传递给grep
. string-splitting 和 globbing 的第一个结果$DATE $HOUR
成为grep
搜索的文件名,后续的成为搜索的文件名。
除此之外,date
无论如何在同一个脚本中多次调用是一个坏主意。如果您的脚本在午夜过后运行怎么办?您可以在date
一天结束时拨打第一个电话,第二个电话在第二天早上开始时返回。为避免这种风险,请date
只调用一次,如下所示:
now=$(date '+%Y-%m-%d %H')
msg="generated for Production"
orders_this_hour=$(grep -Ec "($now.*$msg|$msg.*$now)" <cli.log)
output="$now : $orders_this_hour"
echo "$output" >> flow_productivity.log
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句