awk学习笔记(13) - 输出单引号

简介:

这个问题是在工作中遇到的,当时同事想将一个excel的文本转成sql再导入到数据库中。

文本test.txt内容如下:

 
 
  1. Jones 2143 78 84 
  2. Gondrol 2321 56 58 
  3. RinRao 2122 38 37 
  4. Edwin 2537 87 97 
  5. Dayan 2415 30 47 

现在要转成类似于:

 
 
  1. insert into table values ('Jones', 2143, 78, 84); 

这样的语句。

用awk来处理应该是非常简单的事,一行就够了。于是,写了下面的语句:

 
 
  1. awk '{print "insert into table values(\'"$1"\',"$2","$3","$4")"}' test.txt 

很不幸的是,在awk中用"\"来转义单引号是不成功的。会报下面的错:

 
 
  1. -bash: syntax error near unexpected token `)' 

要想正确输出单引号,至少有下面三种方法:

1.使用16进制\x27

 
 
  1. awk '{print "insert into table values(\x27"$1"\x27,"$2","$3","$4")"}' test.txt

2.使用8进制\047

 
 
  1. awk '{print "insert into table values(\047"$1"\047,"$2","$3","$4")"}' test.txt

3.使用变量替换

 
 
  1. awk -v d="'" '{print "insert into table values("d$1d","$2","$3","$4")"}' test.txt 

这种方式稍微解释一下:-v是awk中定义变量的选项,d是定义的变量,其值是用双引号包起来的一个单引号。在$1两侧的是d变量,这样就避免了在单引号中输出单引号的麻烦。

三种方式的输出结果都是:

 
 
  1. insert into table values('Jones',2143,78,84) 
  2. insert into table values('Gondrol',2321,56,58) 
  3. insert into table values('RinRao',2122,38,37) 
  4. insert into table values('Edwin',2537,87,97) 
  5. insert into table values('Dayan',2415,30,47) 

 










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1036771,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
Perl
在Awk中,直接通过文件作为输入
在Awk中,直接通过文件作为输入
85 2
|
7月前
|
监控 Unix Linux
强大的文本处理工具组合:egrep、正则表达式、awk、cut、xargs
了解Linux和Unix文本处理的关键工具:egrep(扩展正则表达式搜索)、正则表达式、awk(文本分析)、cut(剪切文本)和xargs(传递参数给命令)。这些工具组合使用可高效处理、分析大量数据,尤其在日志分析和文本查询中。例如,从Web服务器日志中查找404错误,先用egrep筛选,再用awk或cut提取IP和URL,最后用xargs配合其他命令执行操作。掌握这些工具能提升工作效率。
|
8月前
|
Perl
awk的正则表达
awk的正则表达
102 6
awk 常用的命令样例
以下是一些常用的 awk 命令样例: 1. 打印文件的某列: ``` awk '{print $1}' filename.txt ``` 这个命令会打印文件 `filename.txt` 的第一列。 2. 根据条件筛选行并打印: ``` awk '$3 > 10 {print $1, $2}' filename.txt ``` 这个命令会打印文件 `filename.txt` 中第三列大于 10 的行的第一列和第二列。 3. 计算并打印某列的总和: ``` awk '{sum += $1} END {print sum}' filename.txt ``` 这个命令会计算文件 `file
141 0
|
Perl
awk指定分隔符
awk指定分隔符
78 0
|
Perl Linux 数据格式

热门文章

最新文章