如何在awk中删除sql函数格式?
我有一个sql查询,如下所示:如何在awk中删除sql函数格式?,sql,regex,awk,Sql,Regex,Awk,我有一个sql查询,如下所示: SELECT test1(func1(MYFIELD)), test2(MAX(MYFIELD), LOWER("NOPE")), test3(MAX(MYFIELD), 1234), AVG(test1(test2(MYFIELD, func1(4)))), func2(UPPER("stack")) SUBSTR(MYFIELD, 2, 4), test2(MIN(MYFIE
SELECT test1(func1(MYFIELD)),
test2(MAX(MYFIELD), LOWER("NOPE")),
test3(MAX(MYFIELD), 1234),
AVG(test1(test2(MYFIELD, func1(4)))),
func2(UPPER("stack"))
SUBSTR(MYFIELD, 2, 4),
test2(MIN(MYFIELD), SUBSTR(LOWER(UPPER("NOPE")), 1, 7)),
SUBSTR('func1(', 2, 4)
FROM MYTABLE;
然后我尝试删除所有名为:
- 测试1
- 测试2
- 测试3
- 职能1
- 功能2
SELECT MYFIELD,
MAX(MYFIELD),
MAX(MYFIELD),
AVG(MYFIELD),
UPPER("stack")
SUBSTR(MYFIELD, 2, 4),
MIN(MYFIELD)
SUBSTR('func1(', 2, 4)
FROM MYTABLE;
我想删除第二行中较低的一行,因为它是要删除的函数之一的参数,在本例中是test2,它有两个参数。那么如果我们删除函数,我们也应该删除它的参数
我在awk中尝试过这样做:
{
print gensub(/(test1|test2|func1|func2)\(/,"","gi", $0);
}
但输出不必考虑右括号,它也不会删除自定义函数的其余参数:
SELECT MYFIELD)),
MAX(MYFIELD), LOWER("NOPE")),
MAX(MYFIELD), 1234),
AVG(MYFIELD, 4)))),
UPPER("stack"))
SUBSTR(MYFIELD, 2, 4),
MIN(MYFIELD), SUBSTR(LOWER(UPPER("NOPE")), 1, 7)),
SUBSTR('', 2, 4)
FROM MYTABLE;
处理这种情况有什么想法或线索吗?您可以将函数名重命名为内置函数
合并
,同时保留brakets(
)
和用户函数的其他参数。
它将产生相同的结果,而不是语法上的结果,但除非内置函数不返回NULL
值,否则它将以相同的方式工作。这将更容易实现,因为你不必担心刹车
如果文件
是您提供的输入,则:
cat文件| sed's | \(test1\| test2\| func1\| func2\)(|合并(| g')
将产生:
SELECT COALESCE(COALESCE(MYFIELD)),
COALESCE(MAX(MYFIELD), 4),
AVG(COALESCE(COALESCE(MYFIELD, COALESCE(4)))),
COALESCE(UPPER("stack"))
FROM MYTABLE;
这个
test2(MAX(MYFIELD),4),
将产生一个问题,因为它减少到(MAX(MYFIELD),4),
,不是吗?是的,你当然是对的。好吧……我会试着弄清楚,如果你没有携带内置函数可能返回的NULL
值,你可以将用户函数更改为内置函数COALESCE
,它返回第一个非NULL值。然后你就不必再携带关于删除e其余参数。cat文件| sed's#\(test1\| test2\| func1\| func2\)(#COALESCE(#g'
为什么,较低(“NOPE”)
预期输出中缺少?删除或不删除test/func
中内容的规则是什么?是的,但它是要删除的函数之一的参数,在本例中是要删除的test2,它有两个参数。如果我们删除该函数,我们也应该删除其参数。完成!感谢您的时间,@Sundeep!:)不,这不是强制性的。例如,我们可以使用test2(MAX(MYFIELD),1234),
(我将再次更新主帖子)。不,我的解决方案没有真正意识到嵌套,我在一个接一个地添加补丁:P。对于最新的情况,补丁应该是sed-E/(test[123]| func[12])\([^,]*,[^)]*)/\2/:a s/(test[123];func[12])([^)]*)/\2/;ta;s/\)\,/),/;s/\),[^]*\),/),/“文件
。。。但这将不会很强劲