[SHELL]:join 命令详解

转载 2011年09月24日 00:56:44
 

join

join 是 paste 的一个很好的增强版本。join 只有在所要连接的文件共享某个共同的域时才会工作。

举例来说,考虑我们上面介绍 paste 时所使用的两个文件。下面是在使用 join 对其进行合并时所发生的事情:

 


# join fileone filetwo
      

 

注意这并没有显示任何东西。join 工具必须要在所操作的文件之间找到共同的域,默认情况下,它期望这个共同的域就是第一个域。

要了解这是如何工作的,我们可以尝试添加一些新内容。假设 fileone 现在包含以下内容:

aaaa    Jurassic Park
bbbb    AI
cccc    The Ring
dddd    The Mummy
eeee    Titanic
      

 

filetwo 现在包含以下内容:

aaaa    Neil    1111
bbbb    Steven  2222
cccc    Naomi   3333
dddd    Brendan 4444
eeee    Kate    5555
      

 

现在,再次尝试下面的命令:

# join fileone filetwo
aaaa    Jurassic Park    Neil    1111
bbbb    AI               Steven  2222
cccc    The Ring         Naomi   3333
dddd    The Mummy        Brendan 4444
eeee    Titanic          Kate    5555
      

 

此时第一个域相同的地方就会被识别出来,匹配项也就进行了合并。paste 是盲目地从每个文件中提取内容并创建输出结果;而 join 则是只合并那些匹配的行,这种匹配必须非常精确。举例来说,假设您向 filetwo 文件中添加一行内容:

aaaa    Neil    1111
bbbb    Steven  2222
ffff    Elisha  6666
cccc    Naomi   3333
dddd    Brendan 4444
eeee    Kate    5555
      

 

现在这个命令只会产生下面的输出结果了:

# join fileone filetwo
aaaa    Jurassic Park   Neil     1111
bbbb    AI              Steven   2222
      

 

只要这两个文件不再匹配了,就不会再执行任何操作了。第一个文件的每一行都匹配且只匹配于第二个文件相同行的默认域。如果找到匹配项,它们就会组成输出;否则就不再执行任何操作了。

默认情况下,join 只会查找第一个域进行匹配,并输出所有列的内容;不过我们可以对这种行为进行修改。-1 选项让我们可以指定使用哪个域作为 fileone 中的匹配项, -2 选项让我们可以指定使用哪个域作为 filetwo 中的匹配项。

举例来说,要对 fileone 的第二个域和 filetwo 的第三个域进行匹配,我们可以使用下面的语法:

# join -1 2 -2 3 fileone filetwo
      

 

-o 选项可以以 {file.field} 格式来指定输出结果。因此,要在匹配行上打印 fileone 的第二个域和 filetwo 的第三个域,语法为:

# join -o 1.2 -o 2.3 fileone filetwo
      


 

join:一个实际的例子

在实践中可以使用 join 工具最明显的方法是从 /etc/passwd 中提取用户名和对应的主目录项,并从 /etc/group 文件中提取组名。组名在 /etc/passwd 文件中是以数字的格式出现在第四个域中的。类似地,它们在 /etc/group 文件中是在第三个域中出现的。

# join -1 4 -2 3 -o 1.1 -o 2.1 -o 1.6 -t":" /etc/passwd /etc/group
root:root:/root
bin:bin:/bin
daemon:daemon:/sbin
adm:adm:/var/adm
lp:lp:/var/spool/lpd
nobody:nobody:/
vcsa:vcsa:/dev
rpm:rpm:/var/lib/rpm
nscd:nscd:/
ident:ident:/home/ident
netdump:netdump:/var/crash
sshd:sshd:/var/empty/sshd
rpc:rpc:/
      

 

文章转载自网管之家:http://www.bitscn.com/os/linux/200611/81068_7.html

[shell]join两个文件

数据库操作中,可以使用join通过
  • nwpulei
  • nwpulei
  • 2014-08-16 18:21:57
  • 8759

shell join命令详解(转)

转自http://www.cnblogs.com/mfryf/p/3402200.html join命令 功能:“将两个文件里指定栏位同样的行连接起来”,即依照两个文件里共有的某一列,将相应的...
  • corncsd
  • corncsd
  • 2015-11-01 21:09:52
  • 1248

SHELL脚本join用法详解

  • 2013年09月17日 10:04
  • 115KB
  • 下载

shell命令join

语法:join [options ...] file1 file2 用途:以共同的一个键值(默认均为f第一个字段),将已储存文件内的记录加以结合。 options: -1 field1 -2 ...
  • jiguangcanhen
  • jiguangcanhen
  • 2014-12-31 16:04:48
  • 591

shell学习十六天----join练习

join练习 两文件如下:t1.txt(tab隔开每一列) 学号 姓名 001 xiaoming 002 zhangsan t2.txt 科目号 学号 分数 0001   001 90 ...
  • shanyongxu
  • shanyongxu
  • 2015-06-16 09:28:42
  • 610

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

使用join连接字段 join命令将多个文件结合起来,每个人建立的每条记录,都共享一个键值,键值指的是记录中的珠子段,通常会是用户名称,个人形式,员工编号之类的数据. 语法: join [opt...
  • shanyongxu
  • shanyongxu
  • 2015-06-16 09:27:39
  • 898

[SHELL]:join 命令详解

join join 是 paste 的一个很好的增强版本。join 只有在所要连接的文件共享某个共同的域时才会工作。 举例来说,考虑我们上面介绍 paste 时所使用的两个文件。下面是在使用 jo...
  • happygongzhuo
  • happygongzhuo
  • 2011-09-24 00:56:44
  • 5501

shell编程中join的用法

http://www.51testing.com/?uid-45739-action-viewspace-itemid-185211join类似 db里面的join方法,同样有left join ri...
  • PfanAya
  • PfanAya
  • 2011-02-19 16:54:00
  • 11910

@shell中join命令的一些使用方法@

join类似 db里面的join方法,同样有left join right join inner join等 指定参数-a 可以指定join的方式。 -a1表示 显示第一个文件中不匹配的行,即为le...
  • zhuying_linux
  • zhuying_linux
  • 2011-11-28 14:27:07
  • 8019

[Shell]Join使用

1. 用途Linux join命令用于将两个文件中,指定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。2. 语法join [OPTION]... F...
  • SunnyYoona
  • SunnyYoona
  • 2016-10-31 11:53:45
  • 1331
收藏助手
不良信息举报
您举报文章:[SHELL]:join 命令详解
举报原因:
原因补充:

(最多只允许输入30个字)