我有两个变量:
var=x
out=1,2,3,4,5
我想用 $var 替换 $out 中的第三列。我可以使用以下命令将第 3 列中的 x 替换为 3(我说的是 $out 中的列,因为这些将是数据库插入语句的值):
echo $out | awk -F ',' -v new=, '{$3="x" ; print}'
那么输出是:
1 2 x 4 5
但是,使用 $var 而不是 x 与以下命令不起作用:
echo $out | awk -F ',' -v new=, '{$3=$var; print}'
那么输出是:
1 2 1,2,3,4,5 4 5
最后一个问题是输出不是逗号分隔的。所以我想要实现的是以下输出:
1,2,x,4,5
其中 x 是 $var 的当前值。有谁知道如何做到这一点。
您的问题是使用时
'
不能扩展 shell 变量,必须使用"
.但是如果你开始使用
"
你必须防止一些替换\
一个解决方案是:
一种选择是将 shell 变量
awk
作为 awk 变量提供,例如,使用-v
:shell 变量
$var
提供给awk
asnew
。在 awk 程序中,new
用来引用这个变量。awk 的输出字段分隔符 (OFS
) 也可以这样设置。awk
会将反斜杠解释$var
为转义序列。为避免这种情况,您可以将 shell 变量放在 awk 的环境中,通过ENVIRON
数组在 awk 程序中访问:在 shell 中,通常最好引用参数扩展(如
"$var"
),否则扩展受文件名生成(又名globbing)和IFS
字段拆分的影响。