使用cut-KDB拆分字符串列表

时间:2018-04-12 20:56:08

标签: kdb

以下列表:

q)a:("ua@1100@1";"sba@2220@2";"r@4444@a")

我想要关注输出:

("1100@1";"2220@2";"4444@a")

?给出@

的第一个索引
q)(a?\:"@")
2 3 1`

但使用cut无法获得所需的结果:

q)(a?\:"@")cut'a
(("ua";"@1";"10";"0@";"1");("sba";"@22";"20@";"2");("r";"@";"4";"4";"4";"4";"@";"a"))`

2 个答案:

答案 0 :(得分:3)

您还可以解析数据,而不是从每个字符串中删除字符。 如果你的数据集很大,它会更有效率。

q)("J@*"0:/:a)[;1]
"1100@1"
"2220@2"
"4444@a"

注意我已经将'key'设置为'J',这会在你的示例中产生空值,但你只关心这些值。

如果你可以将字符串连接起来(sv),它也会更好

q)last "J@;"0:";" sv a
"1100@1"
"2220@2"
"4444@a"

HTH, 肖恩

答案 1 :(得分:1)

cut的左参数为atom时,cut的行为与_不同。

q)2 cut 2 3 4 5 6
(2 3;4 5;,6)

q)2 _ 2 3 4 5 6
4 5 6

使用_剪切字符串

q)(1+a?\:"@")_'a
("1100@1";"2220@2";"4444@a")

q)"@"sv/:1_/:"@" vs/:a
("1100@1";"2220@2";"4444@a")