如何将计算指定行数值平均值的两行Bash脚本改写为单行命令
Bash单行命令实现方案
满足「同时写入values.txt+输出平均值」需求的写法
完全保留你原有两步逻辑,用tee做流分流即可合并为单行:
awk '{if($1=="KEYWORD") for(i=2;i<=NF;i++) print $i}' input.txt | tee values.txt | awk 'BEGIN{sum=0; counter=0}{sum+=$1; counter++}END{print sum/counter}'
逻辑说明
- 第一段awk逻辑和你原代码完全一致:筛选input.txt第一列匹配KEYWORD的行,逐行输出第2列到最后一列的每个数值
tee values.txt作用是将前一步的输出同时写入values.txt文件、和传递给下一个命令,不需要等待文件生成后再读取- 第二段awk直接读取管道传递的数值计算平均值,逻辑和你原代码一致
可选简化写法(不需要保留values.txt时用)
如果不需要生成values.txt文件,可以直接串连两个awk跳过tee:
awk '{if($1=="KEYWORD") for(i=2;i<=NF;i++) print $i}' input.txt | awk 'BEGIN{sum=0; cnt=0}{sum+=$1; cnt++}END{print sum/cnt}'
内容的提问来源于stack exchange,提问作者LockhartTech
相关产品推荐
相关产品推荐

