我有五个文件,每个文件的第一行都有一个数字。
我正在尝试编写一个包含 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 执行此操作,从而避免需要head
for 每个文件:
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}' *
然而,这会完整读取文件,即使它不对其余行执行任何操作。