如何用Bash高效对文件中指定行的数值求和?
Bash 实现文件指定行数值求和的优化方法
需求说明:对目标文件中指定行(示例为第1行和第3行)的数值求和,并将结果赋值给变量。示例文件file1内容如下:
10
20
30
40
原实现通过多次调用sed和expr完成,代码冗余且效率较低。以下是几种更简洁高效的优化方案:
方案1:使用awk一次性处理(推荐)
利用awk的行号匹配功能,直接累加目标行的数值,仅需一次进程调用:
total=$(awk 'NR==1 || NR==3 {sum+=$1} END {print sum}' file1) echo $total
原理:NR代表当前处理的行号,匹配第1或第3行时将该行数值累加到sum变量,最后在END块中输出求和结果。
方案2:awk指定行号直接计算
如果仅需处理固定的两行,也可以直接在awk中暂存第一行的值,到第三行时完成计算输出:
total=$(awk 'NR==1 {a=$1} NR==3 {print a + $1}' file1) echo $total
方案3:结合sed与bash内置算术运算
通过sed提取目标行,用paste拼接成加法表达式,再借助bash内置的$((...))完成计算:
total=$(( $(sed -n '1p;3p' file1 | paste -sd+) )) echo $total
原理:sed -n '1p;3p' file1取出第1、3行内容,paste -sd+将两行用+连接成10+30,最后$((...))解析并计算该表达式。
以上方案均避免了多次进程调用,代码更简洁且执行效率更高。
内容的提问来源于stack exchange,提问作者Ajay
相关产品推荐
相关产品推荐

