grep+awk+sort应用实战
这两天总想着写点其它命令和awk组合的情况,今天抽点时间补上吧。不足之外望读者指教。
文件zja.txt为用户的N次考评成绩,内容如下:
#$cat zja.txt
95 88 zja601
82 89 zja601
76 40 zja601
59 39 zja609
42 67 zja601
96 66 zja601
52 36 zja606
48 43 zja605
87 79 zja662
54 71 zja601
76 68 zja601
71 96 zja601
45 52 zja601
48 88 zja601
92 60 zja607
81 88 zja607
49 39 zja601
30 50 zja601
56 91 zja605
58 67 zja601
69 66 zja604
52 72 zja603
97 51 zja601
88 69 zja602
44 85 zja601
30 87 zja605
45 42 zja671
53 44 zja601
50 49 zja691
68 61 zja601
87 35 zja601
83 71 zja691
80 97 zja601
74 35 zja601
91 74 zja601
67 37 zja641
51 34 zja601
89 67 zja691
44 74 zja601
61 65 zja601
88 74 zja651
53 76 zja601
63 65 zja601
59 89 zja661
55 41 zja601
45 61 zja601
57 56 zja681
75 35 zja601
61 83 zja601
63 89 zja681
第一列为A项指标的成绩,第二列为B项指标的成绩,第三列为用户名。要求如下:找出所有用户zja601的各项指标均大于60的行;并且两项成绩之和要大于150;另外A项指标占总成绩的70%,B项指标占总成绩的30%,要计算出符合以上条年的每次考评的综合成绩;最后要按综合成绩递减排列;最终打印顺序为:用户名 原始第一列 原始第二列 综合成绩。
实际一行命令就可搞定:
grep ^.*zja601$ zja601 | awk ‘$1>60&&$2>60&&($1+$2)>150 {print $1*0.7+$2*0.3, $3, $1, $2}’ | sort -nr | awk ‘{print $2, $3, $4, $1}’
当然,这里甚至可以不使grep,直接使用awk的比较,但为了说明命令的综合应用,因此故意加上了最前面的grep。
比如再增加出下限制:这些数据分部在日志中,每一行不只是这些数据,但存在一定的规范可以找出来,而且含有不合法的行。试想这种情况可能就需要grep + sed来提取合法行和域了。
thx
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!









No Comments, Comment or Ping
Reply to “grep+awk+sort应用实战”
You must be logged in to post a comment.