0

*MISという名前の複数のファイルがあるディレクトリがあります。現在、これらのファイルには繰り返し行が含まれています。* _MISという名前のVIAという名前のディレクトリ内のすべてのファイルを読み取り、繰り返される行を削除した後にファイルを更新する必要があります(sort -uを実行する必要があります)。TCLを使用する必要があります

4

2 に答える 2

3

純粋なTclでこれを行う場合は、タスクを2つの部分に分割する必要があります。ファイルを並べ替える部分(これは優れた手順になります)と、ディレクトリ内の関連するすべてのファイルを並べ替える部分です。

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 に答える