shell实现:对两个文件A[用户id,操作次数]及文件B[用户id,性别],合并得到C[用户id,操作次数,性别],并统计出男女用户操作所占的比例

题目:对两个文件A[用户id,操作次数]及文件B[用户id,性别],合并得到C[用户id,操作次数,性别],并统计出男女用户操作所占的比例

方法:用shell脚本实现

1:添加两个文件中的值,A文件:

id1 4
id2 5
id6 2
id0 4
id4 0
id3 2
id7 4
      B文件:(m代表男,w代表女)
id3 m
id1 w
id7 m
id2 m
id4 w
id6 w
id0 w

2:最终的命令为:

#!/bin/bash
filenameA="/shell/A"
filenameB="/shell/B"
filenameC="/shell/C"
filesortA="filenameA.sort"
filesortB="filenameB.sort"
sort $filenameA > $filesortA
sort $filenameB > $filesortB
join $filesortA $filesortB > /shell/C
awk '{if($3=="w")print $2}' /shell/C > /shell/D
awk '{sum+=$1}END{print sum}' /shell/D > /shell/F
awk '{if($3=="m")print $2}' /shell/C > /shell/E
awk '{sum+=$1}END{print sum}' /shell/E >> /shell/F
awk '{sum+=$2}END{print sum}' /shell/C >> /shell/F
num1=$(sed -n 1p /shell/F)
num2=$(sed -n 2p /shell/F)
num3=$(sed -n 3p /shell/F)
echo "the woman is $num1/$num3"
echo "the man is $num2/$num3"
      执行shell脚本的到的结果   

[root@master ~]# /shell/shell10
the woman is 10/21
the man is 11/21

下面说明下上面的命令   

filenameA,

filesortA

上面两个文件为程序中的变量,为临时变量,在系统中不显示

sort $filenameA > $filesortA
sort $filenameB > $filesortB

此命令将filenameA文件中的内容进行排序,默认按照第一列排序,将排序结果存储到filesortA文件中

join $filesortA $filesortB > /shell/C

将排序后的两个文件进行合并,并将合并结果存储到/shell/C文件中,结果如下:

id0 4 w

id1 4 w

id2 5 m

id3 2 m

id4 0 w

id6 2 w

id7 4 m

awk '{if($3=="w")print $2}' /shell/C > /shell/D

匹配C文件中的第三列为w的第二列的值,保存到D文件中,此时D文件只有一列,结果如下:

4
4
0
2

awk '{sum+=$1}END{print sum}' /shell/D > /shell/F

计算D文件中第一列值的和,保存到F文件中,

awk '{if($3=="m")print $2}' /shell/C > /shell/E

匹配C文件中的第三列为m的第二列的值,保存到E文件中,此时E文件只有一列,结果如下:

5
2
4

awk '{sum+=$1}END{print sum}' /shell/E >> /shell/F

匹配E文件中第一列的所有值的和,将结果续写到F文件中

awk '{sum+=$2}END{print sum}' /shell/C >> /shell/F

计算C文件中第二列所有值的和,续写到F文件中,F文件中的内容如下:

10
11
21
10为w的所有操作之和,11为性别m的所有操作之和,21为总的操作之和

num1=$(sed -n 1p /shell/F)

为取出F文件中第一行的值,并存储到变量num1中,然后进行计算,得出模拟结果


注:次方法个人感觉不是最好的方法,如果有好的建议可以交流!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值