awk小结
·
很好用的文本处理工具,不得不总结一下了
先给个样本,以后测试用
name,department,salary
Alice,Marketing,5000
Bob,Engineering,6000
Charlie,Marketing,5500
David,Engineering,7000
Eva,Sales,4800
Frank,Engineering,6500
Grace,Marketing,5200
Henry,Sales,5100
Ivy,Engineering,7200
Jack,Marketing,5300
Kevin,Sales,4900
Lisa,Engineering,6800
Mike,Marketing,5400
Nancy,Sales,4700
Oliver,Engineering,6900
awk 'BEGIN{
FS=","
print "=== 工资统计报表 ==="
print "部门\t\t工资总额"
print "-------------------"
}
{
dept = $2
salary = $3
total[dept] += salary
count[dept]++
}
END{
print "-------------------"
for (dept in total) {
printf "%s\t\t%.2f\n", dept, total[dept]
}
print "=== 报表结束 ==="
}' employees.csv
总的来说,awk的用法就是 awk 'pattern { action } pattern { action }...' file 这样的
begin 和 end 都相当于pattern,并且只会执行一次
而中间的块,文本有多少行,就执行多少次,靠前的块内的变量,后面的块可以引用,比如上面的total变量
上面的命令输出如下
=== 工资统计报表 ===
部门 工资总额
-------------------
-------------------
Engineering 40500.00
Marketing 26400.00
Sales 19500.00
=== 报表结束 ===
小记
# 不设置 OFS
awk '{print $1, $2, $3}' file
# 输出:字段1 字段2 字段3 (空格分隔)
# 设置 OFS
awk 'BEGIN{OFS="|"} {print $1, $2, $3}' file
# 输出:字段1|字段2|字段3
# 设置 OFS 为制表符
awk 'BEGIN{OFS="\t"} {print $1, $2, $3}' file
# 输出:字段1 字段2 字段3
更多推荐


所有评论(0)