Tcl 从变量中删除重复行

Tcl 从变量中删除重复行,tcl,Tcl,我有一个变量,如下所述 echo $test_output_assign_list assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM; assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM; assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM; assign BIST_DATA_FROM_MEM = mbis

我有一个变量,如下所述


 echo $test_output_assign_list
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;

我想删除此变量中的重复行

变量应该是

assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;

我已经写了如下所述的小脚本,但它并没有给出正确的结果


foreach k $test_output_assign_list {
set un [lsort -unique $k] 
}

echo $un 

{mbist_out.BIST_DATA_FROM_MEM;}

我在这里没有得到正确的结果

您应该首先将输入拆分为行,然后删除重复项。有几种方法可以删除重复项,具体取决于您的意思以及您感兴趣的排序。这里有一种方法,使用字典进行重复删除,它使用每个唯一行第一次出现的顺序:

% set test_output_assign_list {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;}
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;

% set test [split $lines \n]
{assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;} {assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;}

% set uniques [lsort -unique $lines]
{assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;}

% set unique [lindex $unique 0]
assign BIST_DATA_FROM_MEM = mbist_out.BIST_DATA_FROM_MEM;
set deduplicated {}
foreach line [split $test_output_assign_list "\n"] {
    dict set deduplicated $line 1
}
set deduplicated [join [dict keys $deduplicated] "\n"]

我已将结果转换回(可能)多行字符串。这也是一个工作集[concat[lindex$test\u output\u assign\u list 0][lindex$test\u output\u assign\u list 1][lindex$test\u output\u assign\u list 2][lindex$test u output\u assign\u list 3]]