gpt4 book ai didi

bash - awk 的 printf 插入多个变量的正确语法是什么?

转载 作者:行者123 更新时间:2023-11-29 09:25:01 24 4
gpt4 key购买 nike

我复制了一些使用 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

或者:

printf "pattern=%s and count=%s\n", a, a_counter

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

例子

$ 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

关于bash - awk 的 printf 插入多个变量的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48979343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com