Bash awk'的正确语法是什么;s printf是否插入多个变量?

Bash awk'的正确语法是什么;s printf是否插入多个变量?,bash,awk,printf,Bash,Awk,Printf,我复制了一些使用printf输出文件中字符串出现频率的代码 awk ' BEGIN { print "The number of times a appears in the file:" ; } /a/ { a_counter+=1 ; } END { printf "%s\n", a_counter ; } ' $file 将模式修改为变量后,我希望将模式包含到printf命令中,在count旁边: awk -v a="$GENE1" ' BEGIN { print "Th

我复制了一些使用printf输出文件中字符串出现频率的代码

awk ' BEGIN {  print "The number of times a appears in the file:" ; }
/a/ {  a_counter+=1  ;  }
END {  printf "%s\n",  a_counter ; }
'  $file
将模式修改为变量后,我希望将模式包含到printf命令中,在count旁边:

awk -v a="$GENE1" ' BEGIN {  print "The number of times", a, " appears in the file are:" ; }
$0 ~ a {  a_counter+=1  ;  }
END {  printf "%s\n", a, a_counter ; }
'  $file

现在它只打印a的值,而不打印_计数器的值。我读到,
printf
更复杂,我可能不应该像使用
print
那样添加多个用“,”分隔的字符串。但我找不到正确的方法?当然,我可以坚持使用
print
,但我想了解在
printf
的情况下我做错了什么?

对于每个变量,您需要一个格式字符串,如
%s
。因此,请尝试:

printf "%s %s\n", a, a_counter
或:

%s
将任何变量转换为字符串。如果变量是一个数字,则其他格式(如
%f
%e
)可以让您更好地控制如何将数字转换为字符串。有关详细信息,请参见
man awk

例子
啊,太好了,我没有通过查看手册页来了解这一点……感谢提供更多的示例!顺便提一句,好问题——感谢您花时间和精力来分离和澄清。您可能会惊讶于您的脚本没有计算文件中“a”的数量,而是计算“a”所在的行数,即
grep-ca
@karakfa:正确,感谢您指出了这一微小但重要的差异@查理·达菲:没问题……我仍然经常被提醒在这里隔离后续问题,但我尽了最大努力;-)
printf "pattern=%s and count=%s\n", a, a_counter
$ awk -v a="genie" -v a_counter=3 'BEGIN{ printf "%s %s\n", a, a_counter }' 
genie 3
$ awk -v a="genie" -v a_counter=3 'BEGIN{ printf "pattern=%s and count=%s\n", a, a_counter }' 
pattern=genie and count=3
$ awk -v a="genie" -v a_counter=3 'BEGIN{ printf "pattern=%s and count=%7.2f\n", a, a_counter }' 
pattern=genie and count=   3.00
$ awk -v a="genie" -v a_counter=3 'BEGIN{ printf "pattern=%s and count=%9.2e\n", a, a_counter }' 
pattern=genie and count= 3.00e+00