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