Bash awk'的正确语法是什么;s printf是否插入多个变量?
我复制了一些使用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
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