MST

星途 面试题库

面试题:Bash中awk的综合应用与优化

有一个超大的CSV文件big_data.csv,格式为'字段1,字段2,字段3,字段4',其中字段3是数值类型。现在要在不占用过多内存的情况下,使用awk计算字段3数值的平均值、最大值和最小值,并且当平均值小于100时,输出所有字段3数值大于平均值的行。请写出实现该功能的完整awk脚本及相关Bash命令,并解释如何优化以处理大数据量。
16.6万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

awk脚本

BEGIN {
    sum = 0
    count = 0
    min = 1.79769e+308  # 初始化为极大值
    max = -1.79769e+308 # 初始化为极小值
}
{
    num = $3
    sum += num
    count++
    if (num < min) min = num
    if (num > max) max = num
}
END {
    avg = sum / count
    if (avg < 100) {
        for (i = 1; i <= NR; i++) {
            if ($3 > avg) {
                print $0
            }
        }
    }
    print "平均值: " avg
    print "最大值: " max
    print "最小值: " min
}

Bash命令

awk -f script.awk big_data.csv

将上述awk脚本保存为script.awk,然后在Bash中执行上述命令,即可处理big_data.csv文件。

优化处理大数据量

  1. 逐行处理:awk本身就是逐行处理文件,这样避免一次性加载整个文件到内存,减少内存占用。
  2. 避免不必要的数组:脚本中没有使用数组来存储所有数据,进一步减少内存使用。
  3. 减少中间变量:仅使用必要的变量来存储计算结果(如sumcountminmaxavg),避免额外内存开销。
  4. 利用缓冲区:如果可能,在操作系统层面合理设置缓冲区大小,优化I/O操作性能。比如在Linux下,通过调整ulimit -S -n来增加文件描述符数量,减少I/O瓶颈。