for 循环中的求和和计数

for 循环中的求和和计数

我有五个文件,每个文件的第一行都有一个数字。

我正在尝试编写一个包含 for 循环的 bash 脚本,该脚本可以计算文件的数量(计数)以及文件中的数字总和。

这是我到目前为止所尝试的:

for file in $* 
do
        $[head -1 $file] 
        echo $(head -1) 
done

我还不确定如何合并求和和计数元素。

答案1

我想你想要做的事情可以通过以下方式实现:

#!/bin/bash
sum=0
count=0
for file in "$@"
do
        number=$(head -1 "$file")
        count=$((count + 1))
        sum=$((sum + number))
done
echo "The sum of the $count file(s) is: $sum"

您只需添加变量来存储您正在使用的文件的sum和。然后,每次运行循环时count都会增加。count我们还将number文件开头行添加到我们的sum- 变量中。

答案2

您还可以使用 awk 执行此操作,从而避免需要headfor 每个文件:

gawk '{count += 1; sum += $1; nextfile} 
      END {printf "count: %d\t sum: %d\n", count, sum}' *

第一条规则递增计数和总和,然后跳转到下一个文件,从而忽略每个文件除第一行之外的所有内容。在 中END,我们打印出数字。

nextfile是 GNU 的东西,它可能无法在其他版本的awk.另一种选择是仅在第一行显式工作:

awk 'FNR == 1 {count += 1; sum += $1} 
      END {printf "count: %d\t sum: %d\n", count, sum}' *

然而,这会完整读取文件,即使它不对其余行执行任何操作。

相关内容