2015-09-05 96 views
0

AWK可以用千位分隔符字符打印號碼:與千位分隔符報價

$ awk "BEGIN {printf \"%'d\", 1000}" 
1,000 

但是,它需要一個單引號的事實意味着你必須逃脫整個腳本 每"$

$ echo 1000 2000 | awk "{printf \"%'d\", \$2}" 
2,000 

這裏很容易,但可能會帶來很大的麻煩。我想 做這樣的:

$ echo 1000 2000 | awk '{printf z, $2}' z="%'d" 
2,000 

但即使這樣也不是很大了先進的例子:

我試着用OFMTCONVFMT搞亂,但他們似乎沒有任何效果:

$ echo 1000 2000 | awk '{print $2}' OFMT="%'d" CONVFMT="%'d" 
2000 

這些變量可以以我試圖使用它們的方式使用,或者是另一種 me可以更好地處理報價問題嗎?

+0

我想我可能會用'AWK -f script.awk'去迴避問題完全引用。如有必要,我會使用一個here文檔,可能帶有一個帶引號的標記('<<'EOF'')來創建腳本。你甚至可以使用Bash [進程替換](http://www.gnu.org/software/bash/manual/bash.html#Process-Substitution)來避免一個明確命名的臨時文件,儘管我不'我認爲這樣很容易閱讀。總是有'精心選擇的五種引用'技巧:'awk'BEGIN {printf'%'''''d',1000}''或規範的'awk'BEGIN {printf「%'\''d」, 1000}''。 –

回答

7

要嵌入在一個單引號分隔的命令行腳本一個單引號字符,無論你想報價只用八進制轉義序列\047

$ awk 'BEGIN {printf "%\047d\n", 1000}' 
1,000 

積分:不要使用相當於十六進制轉義序列\x27

$ awk 'BEGIN{print "\047foo!\047"}' 
'foo!' 
$ awk 'BEGIN{print "\x27foo!\x27"}' 
oo!' 

http://awk.freeshell.org/PrintASingleQuote

+0

你可以做'awk'BEGIN {print'\ x27「」foo \ x27「}'' –

+0

是的,你可以得到你想要的輸出,但沒有必要記住如何處理'\ x27的警告'而不是使用'\ 047'。 –