我们如何在linux中编写shell脚本来从文件中复制新添加的内容并将其附加到另一个文件中。
我有一个日志文件,其中存储错误,我应该检索新错误并将其存储在数据库表中。我将在一定的时间间隔内运行一个调用shell脚本的cron作业。
编辑:
示例日志
140530 13:48:57 [ERROR] Event Scheduler: [root@%][test.event] Table 'test.test_event' doesn't exist
140530 13:48:57 [Note] Event Scheduler: [root@%].[test.event] event execution failed.
140530 13:49:57 [ERROR] Event Scheduler: [root@%][test.event] Table 'test.test_event' doesn't exist
140530 13:49:57 [Note] Event Scheduler: [root@%].[test.event] event execution failed.
最初我使用 cat 将其复制到一个文件中,但稍后会记录更多错误,只记录新添加的行。我可以在常规基础上执行此操作。
请帮忙!提前谢谢!
答案 0 :(得分:2)
您可以使用tail -f
继续追踪文件中的数据,然后使用>>
(附加重定向)将其附加到第二个文件。
tail -f file1.txt >> file2.txt
将"观看" file1.txt
并将新内容附加到file2.txt
。
要测试它是否有效,请打开另一个终端并执行:
echo "Hello!" >> file1.txt
你应该看到"你好!"出现在file2.txt
。
请注意这仅在file1.txt
上的基础I / O操作是实际附加内容时才有效。如果您在文本编辑器中打开file1.txt
并更改其内容,则赢得工作。它也不能作为一个cron工作,因为它需要不断运行。
要定期检查附加内容,您可以对保存在某处的文件的早期版本执行diff,然后使用sed
仅获取在此期间附加的那些行:
diff file1_old.txt file1_current.txt | \
sed -r -e '/^[^>]/ d' -e 's/^> //' >> file2.txt
但是你必须在你的cron工作中处理早期版本等等。
答案 1 :(得分:1)
如果您需要将一个文件追加(连接)另一个文件,请使用“cat”命令:
cat file1.txt file2.txt > fileall.txt
但是如果你需要修改文件的内容,我建议你使用“sed”或“grep”,如果你需要的是过滤器。
抱歉,您的规格有点松散,所以我无法给您更准确的答案。
顺便说一句。数据库表?你能解释一下吗?