使用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文件里以#开头的行删除