【发布时间】:2018-09-06 23:09:34
【问题描述】:
我有一个日志文件。每当有新日志出现时,我都会使用 tail -f 和 grep 选项。我面临循环问题,它正在执行多次。这是我的脚本,
AuditTypeID=$""
QueryResult=$""
tail -n 0 -F hive-server2.log \
| while read LINE
do
if [ `echo $LINE | grep -c "select *" ` -gt 0 ]
then
AuditTypeID=15
QueryResult=$(
awk '
BEGIN{ print "" }
/Executing command\(queryId/{ sub(/.*queryId=[^[:space:]]+: /,""); q=$0 }
/s3:\/\//{ print "," q }
' OFS=',' hive-server2.log \
| sed -n \$p
)
elif [ `echo $LINE | grep -c 'select count' ` -gt 0 ]
then
AuditTypeID=22
QueryResult="$(
grep -oE 'select count\(.\) from [a-zA-Z][a-zA-Z0-9]*' hive-server2.log \
| sed -n \$p
)"
fi
user=$(
cat hive-server2.log \
| grep user \
| awk -F "[. ]" '{print "," $(NF-1)}' \
| tr -d ',' \
| tr -d 'UTC'
)
Additional_Info=$(
echo -e "{\"user\":\"""${user}""\", \"query\":\"""${QueryResult}""\",\"s3Path\":\"""${s3}""\"}"
)
echo -e "$Additional_Info" > op.json
for file in /var/log/hive/op.json
do
boto-rsync $file s3://hive-log/log/script/$file.$current_time
done
done
它将根据关键字过滤操作。由于某种原因,它正在执行多次。我只需要为一个实例保存输出,感谢您对简化逻辑的任何帮助。
【问题讨论】:
-
使用 4 个空格或制表符修复代码格式以使其可读
-
一团糟,祝你好运
-
你有两个循环,一个在另一个里面。 (
while循环内的for循环)。你在哪里看到问题? (说“执行多次”循环是个问题似乎很奇怪——这不是循环的用途吗?) -
@Jeyamahesan,您可以发布示例输入和示例输出,以便我们也可以在这里提供更好的解决方案。
-
从这个开始:shellcheck.net