我有一个目录,其中包含多个名为 *MIS 的文件。现在这些文件包含重复的行。我需要读取名为 VIA 且名称为 *_MIS 的目录中的所有文件,并在删除重复的行后更新文件(需要进行排序 -u)。需要使用TCL
问问题
4146 次
2 回答
3
如果您在纯 Tcl 中执行此操作,则应将任务分为两部分:对文件进行排序的部分(这将是一个很好的过程)和对目录中所有相关文件进行排序的部分:
proc sort_file {filename} {
# Read the file
set f [open $filename]
set data [read $f]
close $f
# Sort the lines, removing dupes
set lines [split $data "\n"]
set sorted_uniques [lsort -unique $lines]
set data [join $sorted_uniques "\n"]
# Write the file
set f [open $filename w]
puts $f $data
close $f
}
# Now process all the relevant files; the -directory option is a convenient way
# to specify which directory to do the searching in.
foreach filename [glob -directory VIA *_MIS] {
sort_file $filename
}
解决方案的关键部分:lsort -unique
和foreach
/ glob
。
于 2013-03-05T09:01:25.843 回答
2
您可以尝试以下方法
set dir_path path_to_directory_contains_MIS_files
set files_list [glob -directory $dir_path *_MIS]
foreach mis_file $files_list {
if {[catch {exec sort -u $mis_file -o $mis_file} result]} {
puts "ERROR: $result"
}
}
于 2013-03-05T07:06:39.487 回答