【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文件1
		a 1
		b 2
		e 5
	$ cat文件2
		a X
		e Y
		f Z
	$ join file1 file2
		a 1 X
		e 5 Y
	join的默认行为(不提供任何选项时):
		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 > file3

8.3.4控制join的字段匹配
为简洁起见,本节省略了sort命令。仍然需要在合并之前对文件进行排序。
join的默认行为是只打印两个输入文件共有的行。使用-a和-v可以打印一个或两个文件中不匹配的行。
下面的所有示例都使用了以下两个(预先排序的)输入文件:
$ cat file1                                                  $ cat file2
a 1                                                          a A
b 2                                                          c C
						                                     
Command                                                      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 > file3

8.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, where
                      FILENUM 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.mfbz.cn/a/600830.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

市场营销的酒店营销策略研究意义

在市场经济条件下&#xff0c;市场营销策略已成为企业经营管理中最重要的组成部分&#xff0c;其在企业管理中的地位日益显现出来。 然而&#xff0c;由于酒店营销环境的特殊性&#xff0c;酒店营销策略研究一直是咱们从业者研究的热点之一。 对于酒店营销策略的研究&#xf…

【C++】从零开始认识多态

送给大家一句话&#xff1a; 一个犹豫不决的灵魂&#xff0c;奋起抗击无穷的忧患&#xff0c;而内心又矛盾重重&#xff0c;真实生活就是如此。 ​​​​ – 詹姆斯・乔伊斯 《尤利西斯》 _φ(*&#xffe3;ω&#xffe3;)&#xff89;_φ(*&#xffe3;ω&#xffe3;)&…

xv6源码分析 017

xv6源码分析 017 在buffer cache上面的就是logging层了&#xff0c;这一层主要的工作是维持每一个文件系统写入的操作的原子性。什么是原子性&#xff1f;通俗地来讲&#xff0c;原子性可以这样理解&#xff0c;如果一组操作&#xff08;或者一个操作&#xff09;在执行的时候…

【busybox记录】【shell指令】expand

目录 内容来源&#xff1a; 【GUN】【expand】指令介绍 【busybox】【expand】指令介绍 【linux】【expand】指令介绍 使用示例&#xff1a; 把制表符转化为空格 - 默认输出 把制表符转化为空格 - 修改制表符转空格的个数 把制表符转化为空格 - 修改制表符转空格的个数…

HackMyVM-Animetronic

目录 信息收集 arp nmap nikto whatweb WEB web信息收集 feroxbuster steghide exiftool hydra ssh连接 提权 系统信息收集 socat提权 信息收集 arp ┌──(root㉿0x00)-[~/HackMyVM] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 08:00:27:9d:6d:7…

C语言——每日一题(轮转数组)

一.前言 前不久学习了时间复杂度的概念&#xff0c;便在力扣上刷了一道需要参考时间复杂度的题——轮转数组 https://leetcode.cn/problems/rotate-array/submissions这道题不能使用暴力算法&#xff0c;因为这道题对时间复杂度的要求不能为O&#xff08;N^2&#xff09;。因…

【数据库表的约束】

文章目录 一、NULL vs &#xff08;空字符串&#xff09;二、not null 和default三、列描述字段comment四、zerofill五、primary key 主键总结 一、NULL vs ‘’&#xff08;空字符串&#xff09; NULL和空字符串’’ NULL代表什么都没有。 空字符串’代表有&#xff0c;但串…

CI/CD 上云为何如此重要

近年来&#xff0c;敏捷度和速度日渐成为产品开发的关键。市场高速运行&#xff0c;时间就是金钱&#xff0c;也是企业发展的关键。游戏、金融、自动化产业等软件开发企业更像卷入了一场无休止的时间竞赛。 这也难怪 DevOps 备受欢迎。企业借助 DevOps 不断加速优质软件的交付…

​分享1.36G全国村名点数据

数据是GIS的血液&#xff01; 我们在《2015年中国电子地图数据》一文中&#xff0c;为大家有偿分享了一份图层丰富&#xff0c;且有26.8G大小的全国电子地图。 这里再为大家分享一份有1.36G大小的全国村名数据&#xff0c;本数据来自网友分享&#xff0c;据说为2023年的村名数…

VMware 替代专题|14 个常见问题,解读 VMware 替代的方方面面

随着 VMware by Broadcom 调整订阅模式和产品组合&#xff0c;不少用户也将 VMware 替代提上日程。为了帮助用户顺利完成从 VMware 替代方案评估到产品落地的一系列环节&#xff0c;我们通过这篇博客&#xff0c;对 VMware 替代场景下用户经常遇到的问题进行了梳理和解答。 更…

【工作记录】openjdk-22基础镜像的构建

背景 近期使用到的框架底层都用的是springboot3.0&#xff0c;要求jdk版本在17甚至更高。 于是决定制作一个基于openjdk22的基础镜像&#xff0c;本文对这一过程进行记录。 作为记录的同时也希望能够帮助到需要的朋友。 期望效果 容器内可以正常使用java相关命令且版本是2…

再议大模型微调之Zero策略

1. 引言 尽管关于使用Deepspeed的Zero策略的博客已经满天飞了&#xff0c;特别是有许多经典的结论都已经阐述了&#xff0c;今天仍然被问到说&#xff0c;如果我只有4块40G的A100&#xff0c;能否进行全量的7B的大模型微调呢&#xff1f; 正所谓“纸上得来终觉浅&#xff0c;…

华为OD机试【路灯照明问题】(java)(100分)

1、题目描述 在一条笔直的公路上安装了N个路灯&#xff0c;从位置0开始安装&#xff0c;路灯之间间距固定为100米。 每个路灯都有自己的照明半径&#xff0c;请计算第一个路灯和最后一个路灯之间&#xff0c;无法照明的区间的长度和。 2、输入描述 第一行为一个数N&#xff…

一文了解什么是SSL证书?——值得收藏

SSL证书&#xff0c;全称Secure Sockets Layer证书&#xff0c;是一种网络安全协议的实现方式&#xff0c;现在通常指的是其继任者TLS&#xff08;Transport Layer Security&#xff09;证书&#xff0c;不过习惯上仍称为SSL证书。它的主要作用是确保互联网上的数据传输安全&am…

ESP32 IDF linux下开发环境搭建

文章目录 介绍升级Python环境下载Python包配置编译环境及安装Python设置环境变量 ESPIDF环境搭建下载esp-idf 代码编译等待下载烧录成功查看串口打印 介绍 esp32 官方文档给的不是特别详细 参考多方资料 最后才完成开发 主要问题在于github下载的很慢本教程适用于ubuntu deban…

HarmonyOS实战开发-如何实现查询当前城市实时天气功能

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式&#xff0c; 数据接口是和风&#xff08;天气预报&#xff09;&#xff0c; 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是&#xff0c;查询当前城市的实时天气&#xff0c; 目前已实现的功能…

5.合并两个有序数组

文章目录 题目简介题目解答解法一 &#xff1a;合并后排序解法二&#xff1a;双指针排序 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 合并两个有序数组 相关的讲解&#xff01;&#x1f600; 题目简介 题目解答 解法一 &#xff1a;合并后排序 假设我们要合…

每日OJ题_贪心算法三⑤_力扣134. 加油站

目录 力扣134. 加油站 解析代码 力扣134. 加油站 134. 加油站 难度 中等 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一…

Redis学习(十)|使用消息队列的重试机制实现 MySQL 和 Redis 的数据一致性

文章目录 介绍原理整体方案实现步骤示例代码总结其他&#xff1a;Kafka 重试策略配置1. 生产者重试策略配置2. 消费者重试策略配置 介绍 在分布式系统中&#xff0c;保持 MySQL 和 Redis 之间的数据一致性是至关重要的。为了确保数据的一致性&#xff0c;我们通常采取先更新数…

红外与可见光图像融合评价指标(cddfusion中的代码Evaluator.py)

一、Evaluator.py全部代码&#xff08;可正常调用&#xff09; import numpy as np import cv2 import sklearn.metrics as skm from scipy.signal import convolve2d import math from skimage.metrics import structural_similarity as ssimdef image_read_cv2(path, modeRGB…
最新文章