V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1054850490
V2EX  ›  PowerShell

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

  •  
  •   1054850490 · 2023-02-10 15:48:55 +08:00 · 1107 次点击
    这是一个创建于 433 天前的主题,其中的信息可能已经有所发展或是发生改变。
    当用 cmd 输出日志的时候,列如“>> "log11.txt",仅凭 cmd 自身的功能,能不能判断已输出的内容,和控制台的内容不重复,就是说,如果 txt 里某行内容是“hello world”,如果控制台里又出现了“hello world”,则不再追加写入到 txt 里。

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

    代码实现步骤:

    读取日志文件内容
    将读取到的内容存储到一个容器(例如 list )中
    每次从控制台读取一行内容
    在容器中查找是否存在这一行内容
    如果容器中不存在这一行内容,则将其写入日志文件
    这样就可以实现日志不重复的效果。
    by chatgpt
    thinkershare
        4
    thinkershare  
       2023-02-10 16:28:26 +08:00
    你自己想想就知道了,当然是不行,否则>> 输出变成了一个 O(n)的写入操作,首先需要读取已经存在的所有行,然后从头匹配一次,然后确定是否追加.
    正确姿势肯定是应该在程序里面自己缓存,然后检测是否需要使用>>追加到文件。
    aijam
        5
    aijam  
       2023-02-10 16:29:15 +08:00
    换个思路,你把带重复的 log11.txt 丢 uniq 里不行吗?
    julyclyde
        6
    julyclyde  
       2023-02-10 16:48:43 +08:00
    如果你的程序能够特地去分 stdout 和 terminal 的话(不过我看你的问法,你不像是了解这俩区别的口气)只能自己想办法做“去重复”了
    如果你的程序根本不知道什么叫 terminal ,而仅仅是给 stdout 输出,那根本不会重复
    1054850490
        7
    1054850490  
    OP
       2023-02-11 03:10:59 +08:00
    @smallparking 3# AI 大法好
    1054850490
        8
    1054850490  
    OP
       2023-02-11 04:38:16 +08:00
    @aijam 我本身的代码知识不够,所以很多的逻辑完全不懂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   946 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:05 · PVG 05:05 · LAX 14:05 · JFK 17:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.