while循环中的文件复制仅执行一次

时间:2018-04-02 05:36:55

标签: bash shell awk sed sh

我正在使用条件检查检查日志并复制到另一个文件夹。在第一次迭代时,while循环正常执行。在下一次迭代中,文件副本不起作用。这是我的代码。

current_time=$(date "+%Y.%m.%d-%H.%M.%S")
tail -n 0 -F hive-server2.log | \
while read LINE
do
if [ `echo "$LINE" | grep -c "DROP" ` -gt 0 ]
then
  AuditTypeID=14
  QueryResult="$(grep -oEi 'DROP TABLE [a-zA-Z][a-zA-Z0-9_]*' hive-server2.log | sed -n \$p)"
echo -e "$QueryResult" >/dev/null < op.txt
cp op.txt op/op.txt.$current_time
fi
done

在第一次迭代中,输出文件被创建并存储在op目录中。在下一次迭代中,文件没有创建。

预期产量: 对于每次迭代,应在op目录中创建新文件。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

希望这会对你有所帮助。

tail -n 0 -F hive-server2.log | \
while read LINE
do
if [ `echo "$LINE" | grep -c "DROP" ` -gt 0 ]
then
  current_time=$(date "+%Y.%m.%d-%H.%M.%S")
  AuditTypeID=14
  QueryResult="$(grep -oEi 'DROP TABLE [a-zA-Z][a-zA-Z0-9_]*' hive-server2.log | sed -n \$p)"
  echo -e "$QueryResult" > op/op.txt.$current_time > /dev/null 2>&1
  #cp op.txt op/op.txt.$current_time
fi
done