Dav*_*ave 6 command-line bash awk text-processing
我正在使用带有 bash shell 的 Ubuntu Linux。如何在 awk 语句中转义撇号?我想在使用 awk 从文件中提取数据后输出一些 SQL,所以我有:
awk -F',' '{print "SELECT * from user where id = '"$2"';"}' myfile.csv
Run Code Online (Sandbox Code Playgroud)
但这仅打印出:
SELECT * from user where id = ;
Run Code Online (Sandbox Code Playgroud)
如果我将上面修改为
awk -F',' '{print "SELECT * from user where id = "$2";"}' myfile.csv
Run Code Online (Sandbox Code Playgroud)
然后我得到这样的声明
SELECT * from user where id = cf915247dfcf47b6814b5350e5cbdfd8;
Run Code Online (Sandbox Code Playgroud)
但 id 周围没有单引号,这是我需要的。
您可能想通过两种方式来解决这个问题:
通过变量传递单引号:
awk -v sq="'" -F',' '{print "SELECT * from user where id = "sq$2sq";"}' myfile.csv
Run Code Online (Sandbox Code Playgroud)在 printf 语句中使用单引号的十六进制值:
awk -F',' '{printf "SELECT * from user where id = %c%s%c;\n",0x27,$2,0x27}' myfile.csv
Run Code Online (Sandbox Code Playgroud)