2012-03-22 37 views
0

我想通过命令行使用awk的printf生成填充日期的SQL。我使用的代码是:使用awk填写SQL日期

awk 'BEGIN{ printf " convert_tz(time,\047GMT\047,\047America/New_York\047) as timestamp , date_format(convert_tz(time,\047GMT\047,\047America/New_York\047), \047\045Y\045m\045d \045H\045i\045s\047) as dt from table where time >= convert_tz(%s,\047America/New_York\047,\047GMT\047) and time <= convert_tz(%s + interval 1 day ,\047America/New_York\047,\047GMT\047);", "2011-01-01", "2011-01-01"}' 

我相信我有逃逸正确的,但我得到以下结果:

awk: fatal: not enough arguments to satisfy format string 

没有人有,为什么%s不被抓到一个想法,填充?

我使用的特定版本的awk是GNU Awk 3.1.6。

回答

1

您的转义有点不可取,您不能用\045替换%,因为在调用printf之前将其替换回%并使其感到困惑。在printf中转义%的方法是改为使用%%,它可以很好地工作。

...\047%%Y%%m%%d %%H%%i%%s\047... 
0

的\ 045字符被解释为 '%' 格式字符

使用vi转换所有\ 045s到\ 045 \ 045。

:%s/\\045/&&/g 

我希望这有助于。