最近工作中碰到系统故障,分析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