【busybox记录】【shell指令】join

目录

内容来源:

【GUN】【join】指令介绍

【busybox】【join】指令介绍

【linux】【join】指令介绍

使用示例:

打印两个文件的共有行 - 默认输出

可以对字母排序

可以对数字排序

可以对字符串排序

打印两个文件的共有行 - 输出文件1或者文件2中不匹配的行

打印两个文件的共有行 - 检查文件是否排序,报错对应行(默认)

打印两个文件的共有行 - 文件未排序也会对比

此处后续碰到了再继续记录,现阶段到此为止

常用组合指令:

指令不常用/组合用法还需继续挖掘:


内容来源:

        GUN : Coreutils - GNU core utilities

        busybox v1.36.1 : 【busybox记录】【shell指令】基于的Busybox的版本和下载方式-CSDN博客

【GUN】【join】指令介绍

join:在一个公共字段上连接行
join 将具有相同join字段的每一对输入行写入到标准输出。
简介:
join [option]... file1 file2
file1或file2(但不能都是)都可以是` - `,即标准输入。file1和file2应该在关联字段上排序。$ cat文件1a 1b 2e 5$ cat文件2a Xe Yf Z$ join file1 file2a 1 Xe 5 Yjoin的默认行为(不提供任何选项时):join字段是每行的第一个字段;输入的字段由一个或多个空格分隔,前导空格被忽略;输出的字段用空格分隔;每一行输出包括join字段、file1剩余字段和file2剩余字段。
8.3.1通用选项
该程序接受以下选项。参见第2章[常见选项],第2页。
‘-a file-number’除了正常输出外,打印文件file-number中每个不匹配的行(' 1 '或' 2 ')。
‘--check-order’如果任何一个输入文件的顺序错误,则失败并返回错误信息。
‘--nocheck-order’不要检查两个输入文件是否有序。这是默认值。
‘-e string’用字符串替换输入中缺少的输出字段。例如,缺少用 -12jo选项指定的字段。
‘--header’将每个输入文件的第一行作为标题行。标题行将被连接并作为第一个输出行打印。如果使用-o指定输出格式,则标题行将按照指定的格式打印出来。即使指定了--check-order,标题行也不会检查顺序。此外,如果每个文件的标题行不匹配,则将使用第一个文件的标题字段。
‘-i’
‘--ignore-case’比较键时忽略大小写差异。有了这个选项,输入文件的行必须以相同的方式排序。使用`sort -f`来生成这种排序。
‘-1 field’ Join on field文件1的字段(正整数)。
‘-2 field’ Join on field文件2的字段(正整数)。
‘-j field’ 等价于 -1 field -2 field.
‘-o field-list’
‘-o auto’  如果指定了关键字' auto ',则从每个文件的第一行推断输出格式。这与默认的输出格式相同,但也确保了每行输出相同数量的字段。缺失的字段用-e选项替换,多余的字段被丢弃。否则,根据字段列表的格式构造每个输出行。字段列表中的每个元素要么是单个字符'0',要么是形式为m.n,其中文件编号m为' 1 '或' 2 ',n是一个正数字段。字段“0”表示连接字段。在大多数情况下,可以使用对应于连接字段的显式m.n来重现`0`字段规范的功能。然而,当打印不匹配的行(使用-a或-v选项)时,如果两个文件中都有不匹配的行,则无法使用m.n in field-list指定join字段。为了给join提供这种功能,POSIX发明了` 0 `字段规范表示法。字段列表中的元素由逗号或空格分隔。空白分隔符通常需要在shell中引用。例如,命令join -o 1.2,2.2’ 和 ‘join -o '1.2 2.2'’是等价的。所有输出行 - 包括那些因为-a或-v选项而打印的行 - 都受指定的字段列表的约束。
‘-t char’ 使用字符作为输入和输出字段分隔符。将输入文件中出现的每个字符视为重要的。使用`sort -t char`,不使用`sort`的-b选项,来生成这种排序。如果指定了`join -t ''`,则会考虑整行,以匹配默认的排序操作。如果指定了'-t '\0'',则使用ASCII NUL字符来分隔字段。
‘-v file-number’打印文件file-number中每一个不匹配的行(' 1 '或' 2 '),而不是正常的输出。
‘-z’
‘--zero-terminated’用0字节而不是换行符分隔项(ASCII LF)。例如,将输入视为用ASCII NUL分隔的项目,并以ASCII NUL终止输出项目。此选项可以与` perl -0 `或` find -print0 `和` xargs -0 `一起使用,它们的作用相同,以便可靠地处理任意文件名(即使是包含空格或其他特殊字符的文件名)。使用-z,换行符被视为字段分隔符。
退出状态为零表示成功,非零值表示失败。
如果指定了--check-order选项,未排序的输入将导致致命的错误消息。
如果指定了--nocheck-order选项,未排序的输入将永远不会导致错误消息。如果这两个选项都没有给出,只有当发现输入文件包含不配对的行,并且两个输入文件都非空时,才会诊断出排序错误的输入。
如果输入文件被诊断为未排序,join命令将以非零状态退出(并且不应该使用输出)。
通过指定--nocheck-order强制join处理包含不配对行的错误排序的输入文件并不能保证产生任何特定的输出。输出可能与您希望的不一致。
8.3.2 先排序
join 要求输入文件经过排序。每个输入文件都应该根据join中使用的键(=字段/列号)排序。推荐的排序选项是`sort -k 1b,1`(假设所需的键在第一列)。
典型的用法:
$ sort -k 1b,1 file1 > file1.sorted
$ sort -k 1b,1 file2 > file2.sorted
$ join file1.sorted file2.sorted > file3
通常,排序顺序是由LC_COLLATE区域设置指定的排序序列。除非指定了-t选项,否则排序比较会忽略join字段开头的空格,如sort -b。如果指定了--ignore-case选项,那么排序比较会忽略join字段中字符的大小写,比如sort -f:
$ sort -k 1bf,1 file1 > file1.sorted
$ sort -k 1bf,1 file2 > file2.sorted
$ join --ignore-case file1.sorted file2.sorted > file3
如果将sort的输出提供给join,那么sort和join命令应该使用一致的区域设置和选项。你可以使用类似` sort -k 1b,1 `这样的命令对文件的默认连接字段进行排序,但如果你选择了非默认的区域设置、连接字段、分隔符或比较选项,那么你应该在连接和排序之间保持一致。
为了避免任何与语言环境相关的问题,建议对这两个命令都使用`C`语言环境:
$ LC_ALL=C sort -k 1b,1 file1 > file1.sorted
$ LC_ALL=C sort -k 1b,1 file2 > file2.sorted
$ LC_ALL=C join file1.sorted file2.sorted > file3
8.3.3处理字段
使用-1、-2为每个输入文件设置关键字段。确保前面的排序命令操作的是相同的字段。
下面的例子使用第一个文件的第7个字段和第二个文件的第3个字段的值来连接两个文件:
$ sort -k 7b,7 file1 > file1.sorted
$ sort -k 3b,3 file2 > file2.sorted
$ join -1 7 -2 3 file1.sorted file2.sorted > file3
如果两个文件的字段编号相同,则使用-j:
$ sort -k4b,4 file1 > file1.sorted
$ sort -k4b,4 file2 > file2.sorted
$ join -j4 file1.sorted file2.sorted > file3
sort和join都可以操作以空格分隔的字段。要指定不同的定界符,可以在两个中都使用-t:
$ sort -t, -k3b,3 file1 > file1.sorted
$ sort -t, -k3b,3 file2 > file2.sorted
$ join -t, -j3 file1.sorted file2.sorted > file3
要指定制表符(ascii 0x09)字符而不是空格,使用:1
$ sort -t$'\t' -k3b,3 file1 > file1.sorted
$ sort -t$'\t' -k3b,3 file2 > file2.sorted
$ join -t$'\t' -j3 file1.sorted file2.sorted > file3
如果指定了`join -t ''`,那么匹配默认排序操作的整行将被考虑:
$ sort file1 > file1.sorted
$ sort file2 > file2.sorted
$ join -t '' file1.sorted file2.sorted > file38.3.4控制join的字段匹配
为简洁起见,本节省略了sort命令。仍然需要在合并之前对文件进行排序。
join的默认行为是只打印两个输入文件共有的行。使用-a和-v可以打印一个或两个文件中不匹配的行。
下面的所有示例都使用了以下两个(预先排序的)输入文件:
$ cat file1                                                  $ cat file2
a 1                                                          a A
b 2                                                          c CCommand                                                      Outcome
$ join file1 file2                                           common lines (intersection)
a 1 A$ join -a 1 file1 file2                                      来自第一个文件的公共行和未配对行
a 1 A
b 2$ join -a 2 file1 file2                                      来自第二个文件的公共行和未配对行
a 1 A
c C$ join -a 1 -a 2 file1 file2                                 两个文件中的所有行(配对和非配对)(union)
a 1 A                                                        见下文关于-o自动。
b 2
c C$ join -v 1 file1 file2                                      第一个文件的未配对行(差异)
b 2$ join -v 2 file1 file2                                      第二个文件中未配对的行(差异)
c C$ join -v 1 -v 2 file1 file2                                 两个文件中未配对的行,省略公共行(对称差异)
b 2
c C在处理不成对的行时,-o auto -e X选项很有用。下面的示例打印两个文件中的所有行(公用行和未配对的行)。没有-o auto,很难分辨哪些字段来自哪个文件:
$ join -a 1 -a 2 file1 file2
a 1 A
b 2
c C
$ join -o auto -e X -a 1 -a 2 file1 file2
a 1 A
b 2 X
c X C
如果输入没有不可配对的行,则有一个GNU扩展可用;排序顺序可以是当且仅当上述排序比较认为两个字段相等时认为它们相等的任何顺序。例如:
$ cat file1
a a1
c c1
b b1
$ cat file2
a a2
c c2
b b2
$ join file1 file2
a a1 a2
c c1 c2
b b1 b2
8.3.5标题行
当要关联的文件的标题行没有排序时,可以使用——header选项:
$ cat file1
Name Age
Alice 25
Charlie 34
$ cat file2
Name Country
Alice France
Bob Spain
$ join --header -o auto -e NA -a1 -a2 file1 file2
Name Age Country
Alice 25 France
Bob NA Spain
Charlie 34 NA
要对带有标题行的文件进行排序,请使用GNU sed -u。下面的例子对文件进行排序,但保留每个文件的第一行:
$ ( sed -u 1q ; sort -k2b,2 ) < file1 > file1.sorted
$ ( sed -u 1q ; sort -k2b,2 ) < file2 > file2.sorted
$ join --header -o auto -e NA -a1 -a2 file1.sorted file2.sorted > file38.3.6文件的并、交、差
将sort、uniq和join组合起来,对文件执行与set操作等价的操作:Command                                       outcome
sort -u file1 file2                           未排序文件的合并
sort file1 file2 | uniq -d                    未排序文件的交集
sort file1 file1 file2 | uniq -u              未排序文件的差值
sort file1 file2 | uniq -u                    未排序文件的对称差值
join -t '' -a1 -a2 file1 file2                有序文件的并集
join -t '' file1 file2                        排序文件的交集
join -t '' -v2 file1 file2                    已排序文件的差异
join -t '' -v1 -v2 file1 file2                有序文件的对称差值
上面的所有例子都是针对整行而不是特定字段的:sort without -k和join -t都将整行作为键

【busybox】【join】指令介绍

NA

【linux】【join】指令介绍

[root@localhost bin]# join --help
用法:join [选项]... 文件1 文件2
For each pair of input lines with identical join fields, write a line to
standard output.  The default join field is the first, delimited by blanks.When FILE1 or FILE2 (not both) is -, read standard input.-a FILENUM        also print unpairable lines from file FILENUM, whereFILENUM is 1 or 2, corresponding to FILE1 or FILE2-e EMPTY          replace missing input fields with EMPTY-i, --ignore-case  ignore differences in case when comparing fields-j FIELD          equivalent to '-1 FIELD -2 FIELD'-o FORMAT         obey FORMAT while constructing output line-t CHAR           use CHAR as input and output field separator-v 文件编号        	类似 -a 文件编号,但禁止组合输出行-1 域          	在文件1 的此域组合-2 域          	在文件2 的此域组合--check-order     	检查输入行是否正确排序,即使所有输入行均是成对的--nocheck-order   	不检查输入是否正确排序--header          	将首行视作域的头部,直接输出而不对其进行匹配-z, --zero-terminated     line delimiter is NUL, not newline--help		显示此帮助信息并退出--version		显示版本信息并退出Unless -t CHAR is given, leading blanks separate fields and are ignored,
else fields are separated by CHAR.  Any FIELD is a field number counted
from 1.  FORMAT is one or more comma or blank separated specifications,
each being 'FILENUM.FIELD' or '0'.  Default FORMAT outputs the join field,
the remaining fields from FILE1, the remaining fields from FILE2, all
separated by CHAR.  If FORMAT is the keyword 'auto', then the first
line of each file determines the number of fields output for each line.Important: FILE1 and FILE2 must be sorted on the join fields.
E.g., use "sort -k 1b,1" if 'join' has no options,
or use "join -t ''" if 'sort' has no options.
Note, comparisons honor the rules specified by 'LC_COLLATE'.
If the input is not sorted and some lines cannot be joined, a
warning message will be given.GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告 join 的翻译错误
完整文档请见:<https://www.gnu.org/software/coreutils/join>
或者在本地使用:info '(coreutils) join invocation'

使用示例:

打印两个文件的共有行 - 默认输出

可以对字母排序

指令: join test1.txt test2.txt

可以对数字排序

指令: join test11.txt test22.txt

可以对字符串排序

指令: join test111.txt test222.txt

打印两个文件的共有行 - 输出文件1或者文件2中不匹配的行

-a file-number 选项  指定输出哪个文件的不匹配行

指令: join -a 1 test111.txt test222.txt

指令: join -a 2 test111.txt test222.txt

打印两个文件的共有行 - 检查文件是否排序,报错对应行(默认)

--check-order 选项

test3.txt 是一个未排序的文件

指令: join test1.txt test3.txt

打印两个文件的共有行 - 文件未排序也会对比

--nocheck-order 选项

test3.txt 是一个未排序的文件,可以看到没有输出未排序的行

指令: join --nocheck-order test1.txt test3.txt

此处后续碰到了再继续记录,现阶段到此为止

常用组合指令:

NA

指令不常用/组合用法还需继续挖掘:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/675894.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Git】Git学习-10-11:GitHub,SHH配置,克隆仓库

学习视频链接&#xff1a;【GeekHour】一小时Git教程_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1HM411377j/?vd_source95dda35ac10d1ae6785cc7006f365780 创建仓库 配置SSH密钥可以更加安全&#xff0c;方便地推送、拉取代码 根目录下&#xff0c;进入.ssh文件&am…

sql优化思路

sql的优化经验 这里解释一下SQL语句的优化的原理 1.指明字段名称&#xff0c;可以尽量使用覆盖索引&#xff0c;避免回表查询&#xff0c;因此可以提高效率 2.字面意思&#xff0c;无需过多赘述。索引就是为了提高查询效率的。 3.图中两条sql直接可以使用union all 或者 uni…

[Kotlin]创建一个私有包并使用

1.创建Kotlin项目 创建项目&#xff1a; 在Android Studio或其他IDE中选择“Create New Project”。选择Kotlin和Gradle作为项目类型和构建系统。指定项目名称和位置&#xff0c;完成设置。 添加依赖: 如果你的库需要额外的依赖&#xff0c;可以在 build.gradle (Module: app…

ReactFlow的ReactFlow实例事件传参undefined处理状态切换

1.问题 ReactFlow的ReactFlow实例有些事件我们在不同的状态下并不需要&#xff0c;而且有时候传参会出现其它渲染效果&#xff0c;比如只读状态下我们不想要拖拉拽onEdgesChange连线重连或删除的功能。 2.思路 事件名称类型默认值onEdgesChange(changes: EdgeChange[]) >…

工厂自动化升级改造(2)-RS485与Modbus通信协议

在工业控制、电力通信、智能仪表等领域,数据交换通常依赖于串口通信。最初,RS232接口是主流选择,然而,由于工业现场的复杂性,各种电气设备产生的电磁干扰可能导致信号传输错误。 RS232和RS485是两种不同的串行通信协议,它们在电气特性、传输距离和拓扑结构等方面有所不同…

微信小程序(Taro)获取经纬度并转化为具体城市

1、获取经纬度 申请权限&#xff0c;想要使用微信小程序获取经纬度的方法是要申请该方面的权限。 获取经纬度的方法有很多选择其中一个使用就好。 我使用的是Taro.getFuzzyLocation(&#xff09; 在app.config.js中需要添加设置 requiredPrivateInfos: ["getFuzzyLocat…

VS调试技巧

1. 什么是bug bug本意是“昆⾍”或“⾍⼦”&#xff0c;现在⼀般是指在电脑系统或程序中&#xff0c;隐藏着的⼀些未被发现的缺陷或 问题&#xff0c;简称程序漏洞。 “Bug” 的创始⼈格蕾丝赫柏&#xff08;Grace Murray Hopper&#xff09;&#xff0c;她是⼀位为美国海军⼯…

SpringBoot中这样用ObjectMapper

每次new一个单例化个性化配置小结 你要说他有问题吧&#xff0c;确实能正常执行&#xff1b;可你要说没问题吧&#xff0c;在追求性能的同学眼里&#xff0c;这属实算是十恶不赦的代码了。 首先&#xff0c;让我们用JMH对这段代码做一个基准测试&#xff0c;让大家对其性能有个…

jenkins部署服务到windows系统服务器

1、安装openSSH windows默认不支持ssh协议&#xff0c;需要下载安装&#xff0c;主要适用于jenkins传输文件已经执行命令使用 点击查看下载openSSH 2、项目配置 这里简单说说怎么配置&#xff0c;主要解决点就是ssh执行cmd或shell命令时不能开启新窗口导致应用部署失败或者断…

PLC学习笔记

PLC学习笔记 前言一、一些基操知识二、GX works2编程2.1 位逻辑1.2 中间寄存器1.3 PLC的扫描方式 总结 前言 我这个人真的是太渴望知识了~ 一、一些基操知识 一般X表示输入&#xff0c;Y表示输出。一般八个为一组X0~X7M表示中间寄存器&#xff0c;M0~M7时间T、计数C 二、GX …

Spring Data JPA自定义Id生成策略、复合主键配置、Auditing使用

前言 在Spring Data JPA系列的第一篇文章 SpringBoot集成JPA及基本使用-CSDN博客 中讲解了实体类的Id生成策略可以通过GeneratedValue注解进行配置&#xff0c;该注解的strategy为GenerationType类型&#xff0c;GenerationType为枚举类&#xff0c;支持四种Id的生成策略&…

63-HDMI转VGA电路设计

视频链接 HDMI转VGA电路设计01_哔哩哔哩_bilibili HDMI转VGA电路设计 HDMI电路设计&#xff08;参考第13课&#xff09; VGA电路设计&#xff08;参考第15课&#xff09; DP转VGA电路设计&#xff08;参考第75课&#xff09; 1、HDMI转VGA转换器 2、HDMI转VGA简介 1、解…