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

Posted

技术标签:

【中文标题】while循环中的文件复制仅执行一次【英文标题】:file copying in while loop is executing for one time only 【发布时间】:2018-09-11 08:23:48 【问题描述】:

我正在使用条件检查检查日志并将其复制到另一个文件夹。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 目录中创建新文件。

任何帮助将不胜感激。

【问题讨论】:

如何填充$current_time 变量? 你还打算问多少次这个问题 - ***.com/users/8235369/teju-priya?tab=questions 你认为这条线有什么作用 - echo -e "$QueryResult" &gt;/dev/null &lt; op.txt。这是不正确的,没有做你期望做的事情 @Teju Priya,您为什么不在代码标签中向我们展示示例输入和示例输出,以便我们可以在代码中帮助您。 为什么要创建一个新文件?输出文件名在循环内不会改变。 【参考方案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

【讨论】:

@TejuPriya 如果每次都输入if condition,则答案有效,否则您需要检查每次迭代中存在的过滤条件 不,它只创建一个文件。我试着跑了5-6次。总的来说,它只创建了 1 个文件。 我不知道是什么问题,我最近两天都在为这个问题苦苦挣扎。 if 中添加以下行我的意思是在AuditTypeID=14 行之后作为echo "entered inside if condition with time : $current_time" 并执行并查看它打印了多少次以及时间值。我怀疑 $current_time 没有改变,所以它覆盖了文件。 好收获!时间戳是问题所在。当前时间不变

以上是关于while循环中的文件复制仅执行一次的主要内容,如果未能解决你的问题,请参考以下文章

总是至少执行一次的 Python 循环? [复制]

如何让bat文件一直循环执行

Python:只执行一次for循环(不是第一次而是第二次)? [复制]

结果集在while循环中仅迭代一次

Java NIO 实现文件复制

如何循环遍历 Perl 目录中的文件? [复制]