Scripting awk内部打印变量

Scripting awk内部打印变量,scripting,awk,printing,Scripting,Awk,Printing,在这个脚本中,我希望awk打印变量$file,$f,$order和sum/NR(都在一行中) 请大家帮我解决这个问题?awk不会出去为您获取shell变量,您必须将它们作为awk变量传入: pax> export x=XX pax> export y=YY pax> awk 'BEGIN{print x "_" y}' _ pax> awk -vx=$x -v y=$y 'BEGIN{print x "_" y}' XX_YY 另一种方法是使用双引号而不是单引号(这样,

在这个脚本中,我希望awk打印变量
$file
$f
$order
sum/NR
(都在一行中)


请大家帮我解决这个问题?

awk
不会出去为您获取shell变量,您必须将它们作为
awk
变量传入:

pax> export x=XX
pax> export y=YY
pax> awk 'BEGIN{print x "_" y}'
_
pax> awk -vx=$x -v y=$y 'BEGIN{print x "_" y}'
XX_YY
另一种方法是使用双引号而不是单引号(这样,
bash
awk
看到值之前替换这些值),但是您必须开始转义
$
符号和
awk
命令中的所有其他内容:

pax> awk "BEGIN {print \"${x}_${y}\"}"
XX_YY
我更喜欢使用显式变量创建

顺便说一句,对于您之前的相关问题,还有另一个解决方案应该可以解决。

您可以这样做:

echo -n "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
# or printf "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
awk '{sum+=$2} END {print sum/NR}' "${file}_${f}_${order}_v1.xls" | 
    tee "${file}_${f}_avrg.xls" >> P-state-summary.xls
使用不带“\n”的
echo-n
printf
将输出不带换行符的文本,因此
awk
命令的输出将跟随在同一行上。我添加了一个空格作为分隔符,但您可以使用任何东西

使用
tee
将允许您仅使用一个
awk
调用每个输入(订单)文件将输出写入单个文件和摘要文件

echo -n "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
# or printf "${file}_${f}_${order}_v1.xls " >> P-state-summary.xls
awk '{sum+=$2} END {print sum/NR}' "${file}_${f}_${order}_v1.xls" | 
    tee "${file}_${f}_avrg.xls" >> P-state-summary.xls