join看字面上的意义(加入/参加)就可以知道,他是在处理量个档案之间的数据,而且,主要是在处理【两个档案当中,有“相同数据”的那一行,将他们加在一起】的意思。我们利用底下的简单例子来说明:
join --help
用法:join [选项]... 文件1 文件2
针对每一对具有相同内容的输入行,整合为一行写到标准输出,
默认的内容连接区块是由第一个空白符代表的分界符号。当文件1
或文件2 都被指定为"-"时,程序将从标准输入读取数据。
-a 文件编号 文件编号的值可以是1 或2,分别对应文件1 和 文件2。
此选项用于根据指定文件编号输出不成对的行目。
-e 字符 将缺失的输入区块替换为指定字符
-i, --ignore-case 比较时忽略大小写
-j 域 等于"-1 域 -2 域"
-o 格式 按照指定格式构造输出行
-t 字符 使用指定字符作为输入和输出的分隔符
-v 文件编号 类似 -a 文件编号,但禁止组合输出行
-1 域 在文件1 的此域组合
-2 域 在文件2 的此域组合
--check-order 检查输入行是否正确排序,即使所有输入行均是成对的
--nocheck-order 不检查输入是否正确排序
--help 显示此帮助信息并退出
--version 输出版本信息并退出
除非使用了"-t 字符串" 选项,否则前导空格分隔的域将被忽略,如果指定了字符串,
则使用指定字符串分隔任意的域并从1 开始计数的域编号。可以指定的格式是由一个
或多个逗号活空格所分隔的描述,其形式为"文件编号.域"或者"0"。默认的
格式输出合并后的域、文件1 和文件2 剩下的域,均由该指定字符串分隔。
重要提示:文件1 和文件2 必须在合并域中排序。
例如,如果"join"后没有选项,使用"sort -k 1b,1"。
注意,所进行的比较遵从"LC_COLLATE"所指定的的规则。
如果输入没有被排序并导致某些行无法合并,将会显示警告信息。
范例:
范例一:用root的身份,将/etc/passwd与/etc/shadow相关数据整合成一栏
sudo join -t ':' /etc/passwd /etc/shadow
[sudo] password for yekeqiang:
root:x:0:0:root:/root:/bin/bash:!:14535:0:99999:7:::
daemon:x:1:1:daemon:/usr/sbin:/bin/sh:*:14354:0:99999:7:::
bin:x:2:2:bin:/bin:/bin/sh:*:14354:0:99999:7:::
sys:x:3:3:sys:/dev:/bin/sh:*:14354:0:99999:7:::
sync:x:4:65534:sync:/bin:/bin/sync:*:14354:0:99999:7:::
。。。。。。。。
#因为/etc/shadow的权限问题,所以这里必须是root才能动作,而/etc/passwd和/etc/shadow都是
#以 : 来分隔字段,所以必须要用-t ':' 规范字段分隔字符
#且因为/etc/shadow与/etc/passwd刚好都是以第一个字段为账号名称,所以
#就可以将同一行的数据给他贴在一起了;另外再仔细看一下/etc/shadow的内容与/etc/passwd的内容
#你会发现两者都以账号为开始,而上面的输出数据中你会发现特殊的字体部分,那就是你的第二个档案的内
#容。在第二个档案的内容部分,由于账号(第一个字段)与第一的当地是相同的,所以当然的省略掉,因此 #成为上面的输出
范例二:我们知道/etc/passwd第四个字段是GID,那个GID记录在/etc/group当中的第三个字段,请问如何将两个档案整合?我们可以用下面的命令列:
join -t ':' -1 4 /etc/passwd -2 3 /etc/group
0:root:x:0:root:/root:/bin/bash:root:x:
1:daemon:x:1:daemon:/usr/sbin:/bin/sh:daemon:x:
2:bin:x:2:bin:/bin:/bin/sh:bin:x:
3:sys:x:3:sys:/dev:/bin/sh:sys:x:
# 这个例子就更明显了!原本的/etc/passwd的第一行内容应该是:
# root:x:0:0:root:/root:/bin/bash
# 至于/etc/group第一行内容应该是:
# root:x:0:
# 我们将第一个档案的第四栏和第二个档案的第三栏取出,放置到输出的最前方,然后将剩下的书籍给他们
# 加在一起,就成了上面的输出啦!
这个join在处理两个相关的数据文件时,就真的很有帮助的,例如上面的案例中,我的/etc/passwd,/etc/shadow/,/etc/group都是有相关性的,其中的etc/passwd与/etc/shadow/以账号为相关性,至于/etc/shadow/与/etc/group则以所谓的GID(账号的数字定义)来作为他的相关性。我们可以将有关系的资料放在一起,这样的话,在处理数据会对我们帮助很大。
阅读(1389) | 评论(0) | 转发(0) |