目录
30. shell命令--join
功能说明
语法格式
实践操作
注意事项
30. shell命令--join
功能说明
join 是 Linux 中的一个命令行工具,用于基于指定的字段(默认是第一个字段)将两个文件的行合并在一起。它主要处理文本文件,特别是那些由字段分隔符(如空格、制表符或逗号)分隔的字段。
join 的连接操作简言之就是将两个具有相同域的纪录给挑选出来,再将这些纪录所有的域放到一行。
join命令 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
注意:join 在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序是无效的。
语法格式
SYNOPSISjoin [OPTION]... FILE1 FILE2
选项说明
-a<1或2(FILENUM)>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行;
-e<字符串(EMPTY)>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串;
-i或--ignore-case:比较栏位内容时,忽略大小写的差异;
-o<格式(FORMAT)>:按照指定的格式来显示结果例如,-o 1.1,2.2 会输出文件1的第一个字段和文件2的第二个字段;
-t<字符(CHAR))>:使用栏位的分割字符;默认为空格。
-v<1或2(FILENUM)>:跟-a相同,但是只显示文件中没有相同栏位的行;
-1<栏位(FIELD)>:连接[文件1]指定的栏位。指定从file1中比较哪个字段。默认是第一个字段;
-2<栏位(FIELD)>:连接[文件2]指定的栏位。指定从file2中比较哪个字段。默认是第一个字段;
-w WIDTH:指定比较字段的字符宽度。
--nocheck-order:不检查输入文件是否已排序。默认情况下,join 假定输入文件已按合并键排序。
实践操作
0. 环境准备
mkdir -p /test/join
cd /test/joincat >file1.txt <<eof
A 2.0:f1.1:f1.test:1.a
B 2.0:f1.2:f1.join:1.b
C 2.0:f1.3:f1.join:1.c
D 2.0:f1.4:f1.test:1.d
E 2.1:f1.5:f1.test:1.e
eofcat >file2.txt <<eof
A 2.0:f2.1
B 2.0:f2.2
C 2.0:f2.3
D 2.0:f2.4
E 2.2:f2.5
eofhead -v file*1. 默认合并
join file1.txt file2.txtb #默认基于第一个字段合并2.指定字段分隔符
join -t: file1.txt file2.txt3. 输出特定字段
join -o 1.2 2.2 file1.txt file2.txt4. -a1显示第一个文件中没有共同域的纪录,-a2则显示第二个
join -t: -a1 file1.txt file2.txt
join -t: -a2 file1.txt file2.txt5. 设置指定格式的域来显示出来
join -t: -o 1.1 1.3 2.2 file1.txt file2.txt6. 处理未找到匹配的行
#有时,我们可能希望看到在合并过程中未找到匹配的行。
#join 命令的 -a 和 -v 选项允许我们处理这些情况。
join -a 1 -a 2 file1.txt file2.txt
join file1.txt file2.txt
注意事项
- join 命令假定输入文件已按合并键排序。如果文件未排序,结果可能是不正确的。
- 如果使用 -a 或 -v 选项,并且两个文件都没有排序,那么结果将是不确定的。
- 如果要合并的字段包含分隔符,可能需要使用其他工具(如 awk 或 sed)进行预处理。