返回首页 shell 脚本编程

shell 学习十五天---join 连接字段

使用 join 连接字段
join 命令将多个文件结合起来,每个人建立的每条记录,都共享一个键值,键值指的是记录中的珠子段,通常会是用户名称,个人形式,员工编号之类的数据.
语法:
join [options...] file1 file2
主要选项
-1 field1
-2 field2
标明要结合的字段. -1 field 指的是从 file1 取出 field1,而-2field2 指的则为从 file2 取出 field2.字段编号自 1 开始,而非 0.
-o file.field
输出 file 文件中的 field 字段.一般的字段则不打印.除非使用多个-o 选项,即可显示多个输出字段.
-t separator
使用 separator 作为输入字段分割字符,而非使用空白.次字符也为输出的字段分割字符.
行为模式
读取 file1 与 file2,并根据共同键值结合多笔记录.默认以空白分隔字段.输出结果则包括共同键值,来自 file1 的其余记录,接着 file2 的其余记录(指除了键值外的记录).若 file1 位-,则 join 会读取标准输入,每个文件的第一个字段是用来结合的默认键值;可以使用-1 与-2 更改键值.默认情况下,在两个文件中未含键值的行将不打印.
Linux join 命令用于将两个文件中,指定栏位内容相同的行连接起来。
找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
例如:我有两个文件:文件 aa 和文件 bb
aa 的内容为:

joe 100  
jane 200  
herman 300  
chris 400

bb 的内容为:

joe 20  
jane  10  
herman 30  
chris 98

每条记录都有两个字段:业务员的名字和销售量.
为了让 join 运行得到正确结果,输入文件必须先完成排序.

编写下列脚本:

 #!/bin/sh  
 #jointest.sh  
 #删除注释并排序数据文件  
 sed ‘/^#/d’ aa | sort > aa.sorted  
 sed ‘/^#/d’ bb | sort > bb.sorted  
 #以第一个键值做结合,将结果产生至标准输出  
 join aa.sorted bb.sorted  
 #删除缓存文件  
 rm aa.sorted bb.sorted  
 保存退出  
 chmod +x jointest.sh  
 ./jointest.sh  

输出结果如下所示:

chris 400 98  
herman 300 30  
jane 200 10  
joe 100 20  

首先使用 sed 删除注释,然后再排序个别文件.排序后的缓存缓存文件称为 join 命令的输入数据,最后删除缓存文件.sed 的删除还记得吗?
sed ‘/^#/d’ bb
这里的意思是说把 bb 文件里以#开头的行删除

上一篇: 使用 cut 选定字... 下一篇: join 练习