You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tcl代码修正:3M数据文件重复条目筛选(保留高亮最小值)

技术问询

我有一个大小为3M的sample_data.tcl文件,数据格式如下(每条记录包含路径行、数据行,空行分隔):

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_0__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_60__11_  
 **0.777900(5.709091%)**     0.799630(3.05152%)  0.021730(2.633939%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_0__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_58__11_  
 **0.97870(6.076364%)**  0.79990(3.033939%)  0.021800(2.64424%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_1__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_1__44_   
 **0.778180(5.675152%)**     0.798220(3.246061%)     0.020040(2.429091%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_0__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_58__11_  
 **0.77870(5.676364%)**  0.79990(3.033939%)  0.021800(2.64424%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_1/i_tx_top/i_csr/i_reg/txdatgen_seed_udp_reg3_io3_nt_q_reg_20_    
 **0.777320(5.779394%)**     0.803050(2.660606%)     0.025730(3.118788%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_1__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_1__22_   
** 0.777720(5.730909%)**     0.797750(3.303030%)     0.020030(2.427879%)

需求:对比文件中的记录,若存在相同路径的记录,比较其高亮的数值(括号前的浮点数),将数值更小的记录写入输出文件;若路径唯一,则直接写入输出文件。预期输出如下:

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_0__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_60__11_  
 **0.777900(5.709091%)**     0.799630(3.05152%)  0.021730(2.633939%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_1__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_1__44_   
 **0.778180(5.675152%)**     0.798220(3.246061%)     0.020040(2.429091%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_0__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_58__11_  
 **0.77870(5.676364%)**  0.79990(3.033939%)  0.021800(2.64424%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_1/i_tx_top/i_csr/i_reg/txdatgen_seed_udp_reg3_io3_nt_q_reg_20_    
 **0.777320(5.779394%)**     0.803050(2.660606%)     0.025730(3.118788%)

i_top/i_module_wrapper_top_0/i_module_dbe_top_0/i_ctrl_top/u_mcu_system/u_ibex_top/gen_rams_gen_rams_inner_1__gen_noscramble_rams_data_bank/gen_generic_u_impl_generic/mem_reg_1__22_   
** 0.777720(5.730909%)**     0.797750(3.303030%)     0.020030(2.427879%)

我自行编写了以下Tcl代码,但未得到正确结果,请求修正方案:

set inputFile [open $input_def r]
set outputFile [open $output_filename w+]

set lineNumber 0
set skipLines 0
while {[gets $inputFile line] >= 0} {
    incr lineNumber

    if {($lineNumber % 3) == 1} {
        # Extract the first word until the first tab or space
        set firstWord [string trimleft [string range $line 0 [expr {[string first "\t" $line] - 1}]]]
        # Compare with output file data
        set outputData [gets $outputFile]
        if {[string match "*$firstWord*" $outputData]} {
            # Match found, skip current line and the next two lines
            set skipLines 3
            continue
        }
    }

    if {$skipLines > 0} {
        # Skip current line
        set skipLines [expr $skipLines - 1]
        continue
    }

    # Write the line to the output file
    puts $outputFile $line
}

close $inputFile
close $outputFile

内容的提问来源于stack exchange,提问作者Santhosh Nayak D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:27:46