![使用 Miller/mlr 的 DSL 查找一个字符串是否是另一个字符串的子字符串](https://linux22.com/image/215683/%E4%BD%BF%E7%94%A8%20Miller%2Fmlr%20%E7%9A%84%20DSL%20%E6%9F%A5%E6%89%BE%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%98%AF%E5%90%A6%E6%98%AF%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
如何使用 mlr 的 DSL 查找 CSV 的列是否包含另一列?
换句话说,我有一个 CSV
a,b
test and,test and more
并想知道'test and'
(a)是否包含在'test and more'
(b)中
答案1
笔记:我已经编辑了我的回复,使用了伟大的评论@Kusalananda
如果你有
a,b
test*and,test*and more
lorem,ipsum
whether,Finding whether a string
你可以跑
mlr --csv put 'if($b != ssub($b,$a,"")){$test=1}else{$test=0}' input.csv
要得到
A | 乙 | 测试 |
---|---|---|
测试*和 | 测试*及更多 | 1 |
洛雷姆 | 伊普苏姆 | 0 |
无论 | 判断是否是一个字符串 | 1 |
我正在使用ssub
函数,检查我是否有字符串替换b
- 没有正则表达式,没有特殊字符 - 使用我在a
.
if($b != ssub($b,$a,""))
,如果字符串替换后b
不等于其自身,则a
包含在 中b
。
如果你只想过滤,你可以运行
mlr --csv filter '$b != ssub($b,$a,"")' input.csv
要得到
A | 乙 |
---|---|
测试*和 | 测试*及更多 |
无论 | 判断是否是一个字符串 |