1 基本用法
join命令用来联接这些文本文件中的数据行,根据参与联接的两个文本的公共列来联接数据行。基本语法:
join [option]... file1 file2
-1 field:根据第1个文件的指定列进行联接。其中参数field用来指定第1个文件中用来联接的关键字列。
-2 field:根据第2个文件的指定列进行联接。其中参数field用来指定第2个文件中用来联接的关键字列。
join -1 1 -2 2 students.txt scores.txt > studentsscores.txt
指定students.txt的第1列和scores.txt的第2列作为关键字
join students.txt scores.txt > studentsscores.txt
在默认情况下,join命令会将两个文件的第1列作为关键字列进行比较。
join命令在比较关键字时会区分大小写,但是用户可以通过指定-i选项来忽略大小写的区分。
2 内联接文本文件
默认情况下,join命令只输出关键字匹配的文本行,而忽略关键字不匹配的文本行。只有关键字匹配的文本行才会出现在结果中。
3 左联接文本文件
所谓左联接,是指在联接结果中输出左边文件的所有行,即使在右边的文件中没有匹配的行。在左联接中,对于在右边的文件中没有相应关键字的行,由右边文件中所形成的列用空白符填充。
join -a 1 file1 file2 // 实现左联接
join -a 1 students.txt phones.txt > contaction.txt
左联接文件
4 右联接文件
join -a 2 students.txt phones.txt > contaction.txt
5 全联接文本文件
所谓全联接,是指除了显示两个文件中关键字匹配成功的行之外,还包括前后两个文件中中所有不匹配的行。
join -a 1 -a 2 file1 file2
join -a 1 -a 2 students.txt phones.txt > contaction.txt
注:在进行全联接时,不能写在一个-a选项中。
6 自定义输出列
在默认情况下,join命令会输出参与联接的两个文件中的所有列,但是在某些情况下,可以使用-o选项来指定要输出的列的清单。-o选项可以接受一个字段的列表:
filenum.filed 代表某个文件的第几列,如果同时指定了多个列,则多个列之间用空格隔开。
另外,用户可以直接为-o选项指定参数值0,表示仅仅输出关键字列。
join -1 1 -2 2 -o 1.1 1.2 2.3 students.txt phones.txt > contaction.txt
联接文件,并指定输出的列包括第一个文件的1 2列和第二个文件的第3列。