如何将包含空格的变量作为一个变量传递给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
答案 0 :(得分:1)
由于分隔符为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
答案 1 :(得分:1)
您可以使用awk
的{{1}}选项将shell参数传递给-v
:
awk
答案 2 :(得分:1)
有一百万个可能的答案,哪一个适合你,取决于你没有告诉我们你想做什么。这是使用GNU awk进行FPAT的另一种可能性:
$ echo "\"$a\" \"$b\" \"$c\"" | awk -v FPAT='"[^"]+"' '{print "A="$1 "\nB="$2 "\nC="$3 }'
A="one"
B="two three"
C="four"