Есть несколько способов сделать это.
t:([name:("foo/bar";"foo/log";"foo/ton";"foo/tin")]number:999 999 999 999)
Вы можете против , что позволяет разбить строку на разделитель.Например.ниже возвращается вложенный список двух составных строк, которые составили исходную строку.
q)"/" vs "foo/bar"
"foo"
"bar"
Здесь вы можете выбрать строку, которую хотите использовать в обновленном столбце.
q)last "/" vs "foo/bar"
"bar"
Или можете объединить вывод в одну строку, используя raze.
q)raze "/" vs "foo/bar"
"foobar"
Затем вы можете использовать эти методы в операторе обновления для вашей таблицы.В этом случае я использую each-right с оператором sv, чтобы оперировать каждой строкой в столбце имени.Вы также можете использовать функцию для вызова с каждой строкой.(например, update name:{last "/" vs x}each name from t
)
q)update raze each "/" vs/: name from t
name | number
--------| ------
"foobar"| 999
"foolog"| 999
"footon"| 999
"footin"| 999
q)update last each "/" vs/: name from t
name | number
-----| ------
"bar"| 999
"log"| 999
"ton"| 999
"tin"| 999
q)update first each "/" vs/: name from t
name | number
-----| ------
"foo"| 999
"foo"| 999
"foo"| 999
"foo"| 999
Для вашей первой таблицы результатов, если ваш путь к файлу всегда одинаковой длины, более простой метод мог бы использовать оператор take для каждой строки, как показано ниже.
q)update 3#'name from t
name | number
-----| ------
"foo"| 999
"foo"| 999
"foo"| 999
"foo"| 999