2012-03-22 54 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 

我希望這有助於。