次のような複数の行を持つファイルがあります:-
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
最初の 3 つのフィールドは、いくつかのテキスト パターンです。
今、私は次の両方を行う TCL でプログラムを書きたい:-
- ファイルに対して一意のソート「sort -u」を実行し、繰り返される行を削除し、O/P を新しいファイルにダンプします。
- 最初の 3 つのフィールドが同じ場合、数値が互いに 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
}
}