常用unix命令用法 - join命令

join用来将来自两个分类文本文件的行连在一起。下面讲述join工作方式。这里有两个文件file1file2,当然已经分类。每个文件里都有一些元素与另一个文件相关。由于这种关系,join将两个文件连在一起,这有点像修改一个主文件,使之包含两个文件里的共同元素。文本文件中的域通常由空格或tab键分隔,但如果愿意,可以指定其他的域分隔符。类似于数据库中的join

其一般格式为:
join [options] input-file1 input-file2

让我们看看它的可用选项列表:
an       n
为一数字,用于连接时从文件n中显示不匹配行。例如, -a1显示第一个文件的不匹配行,-a2为从第二个文件中显示不匹配行。
o n.m    n
为文件号,m为域号。1.3表示只显示文件1第三域,每个nm必须用逗号分隔,如1.32.1
j n m    n
为文件号,m为域号。使用其他域做连接域。
t       
域分隔符。用来设置非空格或tab键的域分隔符。例如,指定冒号做域分隔符-t

例子:
wangnc> pg name.txt
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd

 

K.Fletch 12 Woodlea
wangnc> pg town.txt
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
wangnc>

连接两个文件,使得名字支持详细地址。例如M.Golls记录指出地址为12 Hidd Rd。连接域为域0—名字域。因为两个文件此域相同, join将假定这是连接域:
wangnc> join name.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
好,工作完成。缺省join删除或去除连接键的第二次重复出现,这里即为名字域。

如果一个文件与另一个文件没有匹配域时怎么办?这时join不可以没有参数选项,经常指定两个文件的-a选项。下面的例子显示匹配及不匹配域。
wangnc> join -a1 -a2 name.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF

使用-o选项选择连接域。例如要创建一个文件仅包含人名及城镇, join执行时需要指定显示域。方式如下:
使用1.1显示第一个文件第一个域,2.2显示第二个文件第二个域,其间用逗号分隔。命令为:
wangnc> join -o 1.1,2.2 name.txt town.txt
M.Golls Norwich
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall

使用-jn m进行其他域连接,例如用文件13和文件22做连接键,命令为:
join -j1 3 -j2 2 file1 file2
使用join应注意连接域到底是哪一个,比如说你认为正在访问域4,但实际上join应该访问域5,这样将不返回任何结果。如果是这样,用awk检查域号。
例如,键入$awk '{print $4}'文件名,观察其是否匹配假想域。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值