我复制了一些使用 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 命令中,位于计数旁边:
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的值,而不打印a_counter的值。我读到了printf
更复杂,我可能不应该添加用“,”分隔的多个字符串,就像我可以做的那样print
。但我找不到正确的方法?我当然可以坚持print
,但我想了解我做错了什么printf
?
您需要一个格式字符串,例如%s
,对于每个变量。所以,尝试:
printf "%s %s\n", a, a_counter
Or:
printf "pattern=%s and count=%s\n", a, a_counter
%s
将任何变量转换为字符串。如果变量是数字,则其他格式,例如%f
or %e
,让您可以更好地控制如何将数字转换为字符串。看man awk
了解详情。
Examples
$ 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)