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" >/dev/null < 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循环中的文件复制仅执行一次的主要内容,如果未能解决你的问题,请参考以下文章