对只有最小值的列进行排序

标签 sorting tcl

我有这种文件:

abak 1 2 3 4
b.b   2 3 4 5 
abak 2 5 6 2 
b.b  -1.2 3 4 6
cc   3 4 5 6

我想要

abak 1 2 3 4
b.b  -1.2 3 4 6
cc   3 4 5 6  

一个按第 2 列排序的文件,只有该列的最小值

作为第一步,我尝试对行进行排序:

set file [open "[lindex $argv 0]" "r"]

    foreach line [split [read $file] "\n"] {
            lappend records [split $line " "]
    }
    set records [lsort -index 1 -real $records]

    foreach record $records {
            puts [join $record " "]
    }
}

但我出错了:

expected floating-point number but got ""
    while executing
"lsort -index 1 -real $records"

第2列不全是 float ,而是实数; 为什么它不能工作?

谢谢

最佳答案

这是一个关于创建和操作数据结构的问题。这就是我的处理方式:

set fid [open filename r]
set data [dict create]
while {[gets $fid line] != -1} {
    set fields [regexp -inline -all {\S+} $line]
    dict lappend data [lindex $fields 0] [lrange $fields 1 end]
}
dict for {key values} $data {
    puts [format "%-5s %s" $key [lindex [lsort -real -index 0 $values] 0]]
}

输出

abak  1 2 3 4
b.b   -1.2 3 4 6
cc    3 4 5 6

关于对只有最小值的列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13509170/

相关文章:

python - Tcl_AsyncDelete 错误多线程 Python

Java Sort map by key 解释

c++ - boost 元组的排序双端队列

web-applications - TCL 作为服务器端编程语言

tcl - 处理嵌入式Tcl运行时执行的退出命令

C++/Tcl 调用 Tcl_CreateCommand 记录的函数时,我可以检索 Tcl 文件行号吗

formatting - 有没有自动格式化 Tcl 源代码的工具?

algorithm - GPU 排序与 CPU 排序

python - Numpy - 数组中行和列的自定义排序

c - 按日期排序问题