我想做的是创建一个小脚本,实际上我知道可以将其变成一句台词。我有一个包含不同数量字段的大文件。我想要做的是对每个记录中的最后一个字段进行求和(如果它是带小数点的数字)...并使用带有占位符“%f\n”的 printf 打印结果...
答案1
对其中包含小数逗号(点)的最后字段求和:
awk '$NF ~ /\./ { sum += $NF } END { printf("%f\n", sum ) }' file.in
也就是说,如果最后一个字段($NF
)中的数据中有一个点,则假设它是一个数字并将其添加到sum
。最后,按照问题中指定的格式打印总和。
请注意,这将跳过最后一个字段中的任何整数。
以下内容将允许awk
尝试使用最后一个字段作为数字,无论它实际上是什么。这意味着 它将1
被解释为 1,that1.2
将被解释为 1.2。字符串hello
和boo
将为零,而123abc
将被视为 123。
awk '{ sum += $NF } END { printf("%f\n", sum) }'
以下不会对包含数字、点、加号和减号以外的任何内容的字段求和:
awk '$NF ~ /^[-+0-9.]*$/ { sum += $NF } END { printf("%f\n", sum) }'
它仍然会接受09+99...
(如 9),但匹配浮点数并非易事,并且取决于您需要匹配的格式。参见例如RegExLib 站点上的这些示例以获得更多有用的模式。