我有一个包含多行的文件,例如:-
A B A 10 20
A B A 10 20
C D A 10 15
A B Q 15 20
A B A 35 45
A B A 15 20
C D A 10 15
A B A 20 25
.
.
.
A A A x1 y1
前三个字段是一些文本模式。
现在我想在 TCL 中编写一个程序,它执行以下两项操作:-
- 对文件进行唯一的排序“sort -u”并删除重复的行并将 O/P 转储到新文件中。
- 对于第一个三个字段相同的情况,仅转储数字彼此大于 10 的那些行。
例如,满足这两个条件的上述文件的 O/P 将是:-
A B A 10 20
A B A 35 45
C D A 10 15
A B Q 15 20
行的顺序在文件中并不重要。
##Changed the program
set input [open "data.txt" "r"]
set content [read $input]
set lines [lsort -unique [split $content "\n"]]
set keylist ""
set valuelist ""
foreach line $lines {
if {$line == ""} { continue }
set data [split $line " "]
set key [join [lrange $data 0 2] "_"]
set index [lsearch $keylist $key]
if {$index != -1} {
set value [lindex $valuelist $index]
set diff_a [expr [lindex $data 3] - [lindex $value 0]]
set diff_b [expr [lindex $data 4] - [lindex $value 1]]
if {$diff_a > 10 && $diff_b > 10 } {
puts $line
}
set a [ lreplace valuelist $index $index [lrange $data 3 4]]
set valuelist $a
} else {
lappend keylist $key
lappend valuelist [lrange $data 3 4]
puts $line
}
}