簡體   English   中英

帶空格的awk打印變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM