[英]awk print variable with spaces
如何將包含空格的變量作為一個變量傳遞給awk?
碼:
a="one"
b="two three"
c="four"
echo $a $b $c | awk '{ print "A="$1 "\nB="$2 "\nC="$3 }'
預期輸出:
A=one
B=two three
C=four
實際輸出:
A=one
B=two
C=three
由於分隔符是space
,所以不能有包含空格的字段值。
用引號保護也無濟於事,因為awk
不會像使用csv解析器那樣將其視為保護列(除非您按照Ed的建議使用FPAT技巧)。
$ echo "$a" \"$b\" "$c" | awk '{ print "A="$1 "\nB="$2 "\nC="$3 }'
A=one
B="two
C=three"
解決方法:更改字段分隔符:
$ echo "$a,$b,$c" | awk -F, '{ print "A="$1 "\nB="$2 "\nC="$3 }'
A=one
B=two three
C=four
您可以使用awk
的-v
選項將shell參數傳遞給awk
:
a="one"
b="two three"
c="four"
echo | awk -va="$a" -vb="$b" -vc="$c" '{ print "A="a "\nB="b "\nC="c }'
有上百萬種可能的答案,哪一種最適合您取決於您嘗試做的事情,而您沒有告訴我們。 這是將GNU awk用於FPAT的另一種可能性:
$ echo "\"$a\" \"$b\" \"$c\"" | awk -v FPAT='"[^"]+"' '{print "A="$1 "\nB="$2 "\nC="$3 }'
A="one"
B="two three"
C="four"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.