常用unix命令用法 - join命令

发布时间:2014-10-25 2:23:23
来源:分享查询网

join用来将来自两个分类文本文件的行连在一起。下面讲述join工作方式。这里有两个文件file1和file2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系,join将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。文本文件中的域通常由空格或tab键分隔,但如果愿意,可以指定其他的域分隔符。类似于数据库中的join。 其一般格式为:join [options] input-file1 input-file2 让我们看看它的可用选项列表:an       n为一数字,用于连接时从文件n中显示不匹配行。例如, -a1显示第一个文件的不匹配行,-a2为从第二个文件中显示不匹配行。o n.m    n为文件号,m为域号。1.3表示只显示文件1第三域,每个n,m必须用逗号分隔,如1.3,2.1。j n m    n为文件号,m为域号。使用其他域做连接域。t        域分隔符。用来设置非空格或tab键的域分隔符。例如,指定冒号做域分隔符-t: 例子:wangnc> pg name.txtM.Golls 12 Hidd RdP.Heller The AcreP.Willey 132 The GroveT.Norms 84 Connaught Rd   K.Fletch 12 Woodleawangnc> pg town.txtM.Golls Norwich NRDP.Willey Galashiels GDDT.Norms Brandon BSLK.Fletch Mildenhall MAFwangnc> 连接两个文件,使得名字支持详细地址。例如M.Golls记录指出地址为12 Hidd Rd。连接域为域0—名字域。因为两个文件此域相同, join将假定这是连接域:wangnc> join name.txt town.txtM.Golls 12 Hidd Rd Norwich NRDP.Willey 132 The Grove Galashiels GDDT.Norms 84 Connaught Rd Brandon BSLK.Fletch 12 Woodlea Mildenhall MAF好,工作完成。缺省join删除或去除连接键的第二次重复出现,这里即为名字域。 如果一个文件与另一个文件没有匹配域时怎么办?这时join不可以没有参数选项,经常指定两个文件的-a选项。下面的例子显示匹配及不匹配域。wangnc> join -a1 -a2 name.txt town.txtM.Golls 12 Hidd Rd Norwich NRDP.Heller The AcreP.Willey 132 The Grove Galashiels GDDT.Norms 84 Connaught Rd Brandon BSLK.Fletch 12 Woodlea Mildenhall MAF 使用-o选项选择连接域。例如要创建一个文件仅包含人名及城镇, join执行时需要指定显示域。方式如下:使用1.1显示第一个文件第一个域,2.2显示第二个文件第二个域,其间用逗号分隔。命令为:wangnc> join -o 1.1,2.2 name.txt town.txtM.Golls NorwichP.Willey GalashielsT.Norms BrandonK.Fletch Mildenhall 使用-jn m进行其他域连接,例如用文件1域3和文件2域2做连接键,命令为:join -j1 3 -j2 2 file1 file2使用join应注意连接域到底是哪一个,比如说你认为正在访问域4,但实际上join应该访问域5,这样将不返回任何结果。如果是这样,用awk检查域号。例如,键入$awk '{print $4}'文件名,观察其是否匹配假想域。

返回顶部
查看电脑版