У меня есть файл, который имеет несколько линий, как: -TCL сортировать файл математически
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
Первые три fileds являются некоторыми текстовыми шаблонами.
Теперь я хочу, чтобы написать программу в TCL, которая делает ОБА следующего: -
- ли уникальный сорт «сорт -u» для файла & reoves повторяющихся строк & отвалов O/P в новом файле.
- В случае, когда 1-ые три поля являются одинаковыми дампами, только те линии, где цифры больше 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
}
}
взгляд на это [нужно сделать своего рода -u. Нужно использовать TCL] (http://stackoverflow.com/questions/15215600/tcl-sort-a-file), он помогает вам с частью (1) – static