【发布时间】:2020-07-27 21:29:57
【问题描述】:
表“t”有这样的一列:
A 列:
ABC^AW=1a2b3c^FWJOGB
AW=2b3c^NJFW
CDE^AW=3c4d5e5f
目标是提取模式“AW=*”,并在“=”符号后生成一个新列,即
B 列:
1a2b3c
2b3c
3c4d5e5f
谢谢!
【问题讨论】:
表“t”有这样的一列:
A 列:
ABC^AW=1a2b3c^FWJOGB
AW=2b3c^NJFW
CDE^AW=3c4d5e5f
目标是提取模式“AW=*”,并在“=”符号后生成一个新列,即
B 列:
1a2b3c
2b3c
3c4d5e5f
谢谢!
【问题讨论】:
您可以使用vs 运算符拆分A 列中的每个字符串:
q)show t:([]A:("ABC^AW=1a2b3c^FWJOGB";"AW=2b3c^NJFW";"CDE^AW=3c4d5e5f"))
A
----------------------
"ABC^AW=1a2b3c^FWJOGB"
"AW=2b3c^NJFW"
"CDE^AW=3c4d5e5f"
q)update B:first each "^" vs/: last each "AW=" vs/: A from t
A B
---------------------------------
"ABC^AW=1a2b3c^FWJOGB" "1a2b3c"
"AW=2b3c^NJFW" "2b3c"
"CDE^AW=3c4d5e5f" "3c4d5e5f"
【讨论】:
vs 运算符的文档:code.kx.com/q/ref/vs,以及另一个有价值的运算符,它可以获取字符串列表并将它们与指定的分隔符连接起来:code.kx.com/q/ref/sv
虽然我更喜欢 Jorge 的回答,并且我会推荐并在实践中使用它,但另一种可能帮助您重新处理字符串操作的方法是将您的数据视为 key-value pairs
q)select{((!/)"S=^"0:x)`AW}'[A]from t
A
----------
"1a2b3c"
"2b3c"
"3c4d5e5f"
这个用例有点过头了,但突出了内置运算符的有用性(一旦你知道在哪里看!)。
【讨论】: