以下列表:
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"))`
答案 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")