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

Splitting a list of strings using cut - 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"))`

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")

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

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

请注意,我已将 'key' 设置为 'J',这将导致您的示例中出现空值,但无论如何您只关心这些值。

如果能把字符串连起来就更好了

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

HTH, 肖恩