join命令可以将多个文件连接在一起,每个文件里的每条记录,都共享一个键值,键值指的是记录中的主字段,通常会是用户名称,员工编号之类的数据,举例来说,有两个文件,一个列出所有业务员销售业绩,一个列出每个业务员应实现的业绩:
> cat sales
#业务员数据
#业务员 量
joe 100
jane 200
herman 150
chris 300
#业务员数据
#业务员 量
joe 100
jane 200
herman 150
chris 300
>cat quotas
#配额
#业务员 配额
joe 50
jane 75
herman 80
chris 95
#配额
#业务员 配额
joe 50
jane 75
herman 80
chris 95
每条记录都有两个字段:业务员的名字与相对应得量,为了让join运作得到正确结果,输入文件必须先完成排序,如下面的脚本lianjie.sh即为使用join结合两个文件。
>cat lianjie.sh
#!/bin/bash
sed '/^#/d' quotas | sort > quotas.sorted
sed '/^#/d' sales | sort > sales.sorted
join quotas.sorted sales.sorted
rm quotas.sorted sales.sorted
#!/bin/bash
sed '/^#/d' quotas | sort > quotas.sorted
sed '/^#/d' sales | sort > sales.sorted
join quotas.sorted sales.sorted
rm quotas.sorted sales.sorted
首先使用sed删除注释,然后再排序个别文件。排序后的缓存文件成为join命令的输入数据,最后删除缓存文件。
执行后的结果如下:
>./lianjie.sh
chris 95 300
herman 80 150
jane 75 200
joe 50 100
chris 95 300
herman 80 150
jane 75 200
joe 50 100
将两个文件的内容连接在一起输出。
本文转自 zhangzj1030 51CTO博客,原文链接:http://blog.51cto.com/tech110/247144