cmd 输出日志的时候,如何不写入重复日志

2023-02-10 15:48:55 +08:00
 1054850490
当用 cmd 输出日志的时候,列如“>> "log11.txt",仅凭 cmd 自身的功能,能不能判断已输出的内容,和控制台的内容不重复,就是说,如果 txt 里某行内容是“hello world”,如果控制台里又出现了“hello world”,则不再追加写入到 txt 里。

注意!是整行内容相匹配就不追加写入,而不是出现“hello world”就整行不不写入
1179 次点击
所在节点    PowerShell
8 条回复
seawing
2023-02-10 16:01:55 +08:00
输出什么,怎么输出不都是 cmd 自身代码逻辑控制的吗?怎么改都行吧
AoEiuV020CN
2023-02-10 16:02:40 +08:00
不能,你必须找个方法把所有出现过的行或者特征摘要给缓存起来,再判断,
smallparking
2023-02-10 16:18:55 +08:00
使用 cmd 命令行终端本身并不能实现这个功能。如果想要实现这样的需求,可以使用其他编程语言,例如 Python 或 C++,编写代码来实现。

代码实现步骤:

读取日志文件内容
将读取到的内容存储到一个容器(例如 list )中
每次从控制台读取一行内容
在容器中查找是否存在这一行内容
如果容器中不存在这一行内容,则将其写入日志文件
这样就可以实现日志不重复的效果。
by chatgpt
thinkershare
2023-02-10 16:28:26 +08:00
你自己想想就知道了,当然是不行,否则>> 输出变成了一个 O(n)的写入操作,首先需要读取已经存在的所有行,然后从头匹配一次,然后确定是否追加.
正确姿势肯定是应该在程序里面自己缓存,然后检测是否需要使用>>追加到文件。
aijam
2023-02-10 16:29:15 +08:00
换个思路,你把带重复的 log11.txt 丢 uniq 里不行吗?
julyclyde
2023-02-10 16:48:43 +08:00
如果你的程序能够特地去分 stdout 和 terminal 的话(不过我看你的问法,你不像是了解这俩区别的口气)只能自己想办法做“去重复”了
如果你的程序根本不知道什么叫 terminal ,而仅仅是给 stdout 输出,那根本不会重复
1054850490
2023-02-11 03:10:59 +08:00
@smallparking 3# AI 大法好
1054850490
2023-02-11 04:38:16 +08:00
@aijam 我本身的代码知识不够,所以很多的逻辑完全不懂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/914935

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX