天天看點

awk學習筆記(13) - 輸出單引号

這個問題是在工作中遇到的,當時同僚想将一個excel的文本轉成sql再導入到資料庫中。

文本test.txt内容如下:

Jones 2143 78 84 

Gondrol 2321 56 58 

RinRao 2122 38 37 

Edwin 2537 87 97 

Dayan 2415 30 47 

現在要轉成類似于:

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

這樣的語句。

用awk來處理應該是非常簡單的事,一行就夠了。于是,寫了下面的語句:

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

很不幸的是,在awk中用"\"來轉義單引号是不成功的。會報下面的錯:

-bash: syntax error near unexpected token `)' 

要想正确輸出單引号,至少有下面三種方法:

1.使用16進制\x27

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

2.使用8進制\047

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

3.使用變量替換

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

這種方式稍微解釋一下:-v是awk中定義變量的選項,d是定義的變量,其值是用雙引号包起來的一個單引号。在$1兩側的是d變量,這樣就避免了在單引号中輸出單引号的麻煩。

三種方式的輸出結果都是:

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

insert into table values('Gondrol',2321,56,58) 

insert into table values('RinRao',2122,38,37) 

insert into table values('Edwin',2537,87,97) 

insert into table values('Dayan',2415,30,47) 

本文轉自 ustb80 51CTO部落格,原文連結:http://blog.51cto.com/ustb80/1036771,如需轉載請自行聯系原作者