很好用的文本处理工具,不得不总结一下了

先给个样本,以后测试用

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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐