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