KDB - 从 table 中的字符串列中提取模式

KDB - Extract pattern from string column in table

Table“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"

虽然我更喜欢 Jorge 的回答并且我会推荐并在实践中使用它,但另一种可能有助于您重温字符串操作的方法是将您的数据视为 key-value pairs

q)select{((!/)"S=^"0:x)`AW}'[A]from t
A
----------
"1a2b3c"
"2b3c"
"3c4d5e5f"

对于这个用例来说有点矫枉过正,但突出了内置运算符的有用性(一旦您知道在哪里查找!)。