awk用空格打印变量

时间:2016-11-10 13:45:19

标签: bash awk

如何将包含空格的变量作为一个变量传递给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

3 个答案:

答案 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"