AWK 单行程序处理具有不同数量字段的文件

AWK 单行程序处理具有不同数量字段的文件

我想做的是创建一个小脚本,实际上我知道可以将其变成一句台词。我有一个包含不同数量字段的大文件。我想要做的是对每个记录中的最后一个字段进行求和(如果它是带小数点的数字)...并使用带有占位符“%f\n”的 printf 打印结果...

答案1

对其中包含小数逗号(点)的最后字段求和:

awk '$NF ~ /\./ { sum += $NF } END { printf("%f\n", sum ) }' file.in

也就是说,如果最后一个字段($NF)中的数据中有一个点,则假设它是一个数字并将其添加到sum。最后,按照问题中指定的格式打印总和。

请注意,这将跳过最后一个字段中的任何整数。

以下内容将允许awk尝试使用最后一个字段作为数字,无论它实际上是什么。这意味着 它将1被解释为 1,that1.2将被解释为 1.2。字符串helloboo将为零,而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 站点上的这些示例以获得更多有用的模式。

相关内容