awk、join等命令的文件处理示例

最近工作中碰到系统故障,分析log文件进行原因调查时,又用到了各种文件处理的命令行,尤其是awk命令,深感它的便利性。虽说这些命令的用法去网上一查就会出来一大堆,但是,真正碰到问题时,能够信手拈来的话,还是能极大的提高效率的。以下简单的总结了下这次的示例,算作是自己的学习笔记,以后有时间回顾一下也有助于理解和记忆。

・all_salary文件(公司全员的工资表)

(姓名,工资)
AA,1001
AB,2001
AC,3005
BB,2043

・it_dept_list文件(IT部门的员工表)

(姓名)
AA
AC

・目的:
分别计算出IT部门和IT部门以外员工的平均工资。

当然,如果把这些数据插入到数据库里,一个select语句就可以解决问题。不过这次是为了练习linux命令的使用方法,所有数据都是以csv文件形式进行处理为前提。

各命令行的执行流程:
①将部门员工表于总表进行结合,抽出部门员工的工资一览

join -j 1 all_salary it_dept_list > it_dept_salary

※-t ‘,’可以指定分隔符
・it_dept_salary

AA,1001
AC,3005

 

②使用awk命令计算出IT部门的平均工资

cut -d, -f2 it_dept_salary | awk '{sum+=$1}END{print sum/NR}' > it_avg_salary

・it_avg_salary

2003

 

③抽取it部门跟总体员工工资表的差分

diff it_dept_salary all_salary > other_salary

・other_salary

0a1,49
> AB,2001
0a2,49
> BB,2043

 

④对文件进行整形处理

cat other_salary | awk '/>/ {print $0}' | cut -d' ' -f2 > trim_other_salary

・trim_other_salary

AB,2001
BB,2043

 

⑤计算其他部门的平均工资

cut -d, -f2 trim_other_salary | awk '{sum+=$1}END{print sum/NR}' > other_avg_salary

・other_avg_salary

2022

Related Posts

Leave a Reply

Your email address will not be published. Required fields are marked *

Close Bitnami banner
Bitnami