TCL通过3种不同的模式匹配删除重复行
TCL通过3种不同的模式匹配删除重复行,tcl,Tcl,我是TCL编程的初学者,希望从输入文件中删除行
完全相同的行内容
模式:“ghi\/\njkl\/\nrcc1”->“点\.*:10个汇”\.
(单词“点”后面的数字和“[color.*”后面的内容可能不同-所有其他内容都需要精确匹配)
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:1”][color=salmon][fontcolor=salmon][style=solid];
(单词“点”后面的数字和“[color.*”后面的
我是TCL编程的初学者,希望从输入文件中删除行
完全相同的行内容
模式:“ghi\/\njkl\/\nrcc1”->“点\.*:10个汇”\.
(单词“点”后面的数字和“[color.*
”后面的内容可能不同-所有其他内容都需要精确匹配)
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:1”][color=salmon][fontcolor=salmon][style=solid];
(单词“点”后面的数字和“[color.*
”后面的内容可能不同-所有其他内容都需要精确匹配)
现在我有以下输入文件
"abc\/\ndef\/\nrccu1" [shape=octagon,color=red,style=filled];
"abc\/\ndef\/\nrccu1" [shape=octagon,color=red,style=filled];
"ghi\/\njkl\/\nrccu1" -> "Point 1: 10 Sinks" [color=salmon] [style=solid] [weight=8];
"123\/\n456\/\nrccu1" -> "Point 9: 10 Sinks" [color=grey] [style=solid] [weight=8];
"ghi\/\njkl\/\nrccu1" -> "Point 8: 10 Sinks" [color=grey] [style=solid] [weight=8];
"ghi\/\njkl\/\nrccu1" -> "Point 13: 20 Sinks" [color=grey] [style=solid] [weight=8];
"mno\/\npqr\/\nrccu1" -> "stu\/\nvwx\/\nrccu1" [label = "depth: 1"] [color=salmon] [fontcolor=salmon] [style=solid];
"mno\/\npqr\/\nrccu1" -> "stu\/\nvwx\/\nrccu1" [label = "depth: 4"] [color=salmon] [fontcolor=salmon] [style=solid];
"mno\/\npqr\/\nrccu1" -> "stu\/\nvwx\/\nrccu1" [label = "depth: 1"] [color=grey] [fontcolor=red] [style=solid];
“abc\/\ndef\/\nrccu1”[形状=八角形,颜色=红色,样式=填充];
“abc\/\ndef\/\nrccu1”[形状=八角形,颜色=红色,样式=填充];
“ghi\/\njkl\/\nrcc1”->“第1点:10个水槽”[颜色=鲑鱼][风格=固体][重量=8];
“123\/\n456\/\nrcc1”->“第9点:10个水槽”[颜色=灰色][样式=实心][重量=8];
“ghi\/\njkl\/\nrcc1”->“第8点:10个水槽”[颜色=灰色][样式=实心][重量=8];
“ghi\/\njkl\/\nrcc1”->“第13点:20个水槽”[颜色=灰色][样式=实心][重量=8];
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:1”][color=salmon][fontcolor=salmon][style=solid];
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:4”][color=salmon][fontcolor=salmon][style=solid];
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:1”][color=grey][fontcolor=red][style=solid];
输出文件应包含:
"abc\/\ndef\/\nrccu1" [shape=octagon,color=red,style=filled];
"ghi\/\njkl\/\nrccu1" -> "Point 1: 10 Sinks" [color=salmon] [style=solid] [weight=8];
"123\/\n456\/\nrccu1" -> "Point 9: 10 Sinks" [color=grey] [style=solid] [weight=8];
"ghi\/\njkl\/\nrccu1" -> "Point 13: 20 Sinks" [color=grey] [style=solid] [weight=8];
"mno\/\npqr\/\nrccu1" -> "stu\/\nvwx\/\nrccu1" [label = "depth: 1"] [color=salmon] [fontcolor=salmon] [style=solid];
"mno\/\npqr\/\nrccu1" -> "stu\/\nvwx\/\nrccu1" [label = "depth: 4"] [color=salmon] [fontcolor=salmon] [style=solid];
“abc\/\ndef\/\nrccu1”[形状=八角形,颜色=红色,样式=填充];
“ghi\/\njkl\/\nrcc1”->“第1点:10个水槽”[颜色=鲑鱼][风格=固体][重量=8];
“123\/\n456\/\nrcc1”->“第9点:10个水槽”[颜色=灰色][样式=实心][重量=8];
“ghi\/\njkl\/\nrcc1”->“第13点:20个水槽”[颜色=灰色][样式=实心][重量=8];
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:1”][color=salmon][fontcolor=salmon][style=solid];
“mno\/\npqr\/\nrcc1”->“stu\/\nvwx\/\nrcc1”[label=“depth:4”][color=salmon][fontcolor=salmon][style=solid];
你想用什么版本的Tcl来做这个?目前我正在使用Tcl版本“8.4”,所有的反斜杠都会出现在输入文件中吗?嗨,格伦,是的:(我想它们需要先被一个独特的字符串替换,比如“XXx\u XXx”,以便进行比较。为什么最后的“mno”会出现缺少行?属性fontcolor
不同,因此输出中应显示行。缺少最后一行“mno”,因为“color”之前的字符串相同。感谢您提供代码-不幸的是,它在我的环境中不起作用-“dict”未知:(@Markus,更新为使用数组而不是dict。你需要更精确地说明你的要求:“颜色之前的字符串”根本不是你在问题中要求的。毕竟:“所有其他需要完全匹配”格伦:非常感谢你的帮助!我已经尝试过了,你的解决方案非常好!
set in [open input.file r]
array set seen {}
while {[gets $in line] != -1} {
# blank lines should be printed as-is
if {[string length [string trim $line]] == 0} {
puts $line
continue
}
# create the "key" for this line
regsub {\mPoint \d+} $line {} key
regsub {\mcolor=\w+} $key {} key
# print the line only if the key is unique
if { ! [info exists seen($key)]} {
puts $line
set seen($key) true
}
}
close $in