Как отсортировать TCL из данного файла?

У меня возникли проблемы с сортировкой с TCL, я не могу вписать эталонный пример в свой.

У меня есть файл, который содержит два столбца,name&area, как Сортировать по области без изменения соответствующего имени?

Я пытаюсь использовать foreach & associate array, но пока не могу этого сделать…

LSDNENCLSSXl_HVT    2.2872
LSDNENCLSSX2_HVT    2.5414
LSDNENCLSSX4_HVT    3.0497
LSDNENCLSSX8_HVT    4.0663
LSDNENCLX1_HVT  7.116032
LSDNENCLX2_HVT  7.62432
LSDNENCLX4_HVT  8.640896
LSDNENCLX8_HVT  11.18233
LSDNENSSXl_HVT  4.320448
LSDNENSSX2_HVT  5.08288
LSDNENSSX4_HVT  5.591168
LSDNENSSX8_HVT  7.370176
LSDNENXl_HVT    7.116032
LSDNENX2_HVT    7.62432
LSDNENX4_HVT    8.640896
LSDNENX8_HVT    11.182336
LSDNSSXl_HVT    1.779008
LSDNSSX2_HVT    2.033152
LSDNSSX4_HVT    2.54144
LSDNSSX8_HVT    4.320448
LSDNXl_HVT  7.116032
LSDNX2_HVT  7.116032
LSDNX4_HVT  7.116032
LSDNX8_HVT  9.149184

Любая помощь будет оценена…

2 ответа

  1. -stride это функция, добавленная в Tcl 8.6, поэтому я думаю, что вы используете Tcl 8.5 или ранее.

    Кроме того, код в вашем комментарии выглядит не совсем правильно. Есть пара вещей, которые выглядят неправильно. Вам нужно передать списокarray set, чтобы получить массив, а массивы не сортируются, поэтому я бы вообще отбросил это. Я бы предложил что-то вроде этого:

    set fh [open "result_table_sort" r]
    set data [read $fh]
    close $fh
    set lines [split $data "\n"]               ;# Use the appropriate EOL character
                                                # if it's different
    set result [lsort -real -index 1 $lines]
    puts $result
    

    Выше подразумевается, что файл result_table_sortхорошо структурирован и не содержит ничего не отформатированного/структурированного, как описано в приведенном примере.

  2. set fh [open "filename"]
    set data [read $fh]
    close $fh
    set words [regexp -all -inline {\S+} $data]
    
    foreach {name area} [lsort -stride 2 -index 1 -real $words] {
        puts "$name\t$area"
    }
    

    Смlsort. документацию.

    Выход

    LSDNSSXl_HVT    1.779008
    LSDNSSX2_HVT    2.033152
    LSDNENCLSSXl_HVT    2.2872
    LSDNENCLSSX2_HVT    2.5414
    LSDNSSX4_HVT    2.54144
    LSDNENCLSSX4_HVT    3.0497
    LSDNENCLSSX8_HVT    4.0663
    LSDNENSSXl_HVT  4.320448
    LSDNSSX8_HVT    4.320448
    LSDNENSSX2_HVT  5.08288
    LSDNENSSX4_HVT  5.591168
    LSDNENCLX1_HVT  7.116032
    LSDNENXl_HVT    7.116032
    LSDNXl_HVT  7.116032
    LSDNX2_HVT  7.116032
    LSDNX4_HVT  7.116032
    LSDNENSSX8_HVT  7.370176
    LSDNENCLX2_HVT  7.62432
    LSDNENX2_HVT    7.62432
    LSDNENCLX4_HVT  8.640896
    LSDNENX4_HVT    8.640896
    LSDNX8_HVT  9.149184
    LSDNENCLX8_HVT  11.18233
    LSDNENX8_HVT    11.182336