Merge branch 'master' of github.com:jaywcjlove/linux-command
This commit is contained in:
commit
d56ceeed72
|
|
@ -1,45 +1,42 @@
|
||||||
comm
|
comm
|
||||||
===
|
===
|
||||||
|
|
||||||
两个文件之间的比较
|
按行比较两个已排序的文件。
|
||||||
|
|
||||||
## 补充说明
|
## 概要
|
||||||
|
|
||||||
**comm命令** 可以用于两个文件之间的比较,它有一些选项可以用来调整输出,以便执行交集、求差、以及差集操作。
|
|
||||||
|
|
||||||
* 交集:打印出两个文件所共有的行。
|
|
||||||
* 求差:打印出指定文件所包含的且不相同的行。
|
|
||||||
* 差集:打印出包含在一个文件中,但不包含在其他指定文件中的行。
|
|
||||||
|
|
||||||
### 语法
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
comm [选项]... 文件1 文件2
|
comm [OPTION]... FILE1 FILE2
|
||||||
```
|
```
|
||||||
|
|
||||||
### 选项
|
## 主要用途
|
||||||
|
|
||||||
|
- 按行比较两个已排序的文件。
|
||||||
|
- 当`FILE1`或`FILE2`为`-`时,读取标准输入。
|
||||||
|
- 无选项时输出三列,第一列为`FILE1`独有的行,第二列为`FILE2`独有的行,第三列为`FILE1`,`FILE2`共有的行。
|
||||||
|
|
||||||
|
|
||||||
|
## 选项
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
如果不附带选项,程序会生成三列输出。
|
-1 不输出第一列。
|
||||||
第一列包含文件1 特有的行,
|
-2 不输出第二列。
|
||||||
第二列包含文件2 特有的行,
|
-3 不输出第三列。
|
||||||
而第三列包含两个文件共有的行。
|
--check-order 检查输入行是否正确的排序,即使它们确实是已排序过的。
|
||||||
|
--nocheck-order 不检查输入行是否正确的排序。
|
||||||
-1 不输出文件1 特有的行
|
--output-delimiter=STR 使用STR作为输出列之间的分隔符而不是默认的TAB。
|
||||||
-2 不输出文件2 特有的行
|
--total 额外地增加第四列输出概要。
|
||||||
-3 不输出两个文件共有的行
|
-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。
|
||||||
|
--help 显示帮助信息并退出。
|
||||||
--check-order 检查输入是否被正确排序,即使所有输入行均成对
|
--version 显示版本信息并退出。
|
||||||
--nocheck-order 不检查输入是否被正确排序
|
|
||||||
--output-delimiter=STR 依照STR 分列
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 参数
|
|
||||||
|
|
||||||
* 文件1:指定要比较的第一个**有序**文件;
|
## 返回值
|
||||||
* 文件2:指定要比较的第二个**有序**文件。
|
|
||||||
|
|
||||||
### 实例
|
返回0表示成功,返回非0值表示失败。
|
||||||
|
|
||||||
|
## 例子
|
||||||
|
|
||||||
文本 `aaa.txt` 内容
|
文本 `aaa.txt` 内容
|
||||||
|
|
||||||
|
|
@ -66,12 +63,6 @@ ttt
|
||||||
jjj
|
jjj
|
||||||
```
|
```
|
||||||
|
|
||||||
两个文件之间的比较,如果没有排序需要带上`--nocheck-order`参数, 没有带上参数将会收到提示,此命令重要之功能在于比较。
|
|
||||||
|
|
||||||
```shell
|
|
||||||
comm: 文件2 没有被正确排序
|
|
||||||
comm: 文件1 没有被正确排序
|
|
||||||
```
|
|
||||||
|
|
||||||
比较结果
|
比较结果
|
||||||
|
|
||||||
|
|
@ -88,21 +79,20 @@ eee
|
||||||
hhh
|
hhh
|
||||||
ttt
|
ttt
|
||||||
jjj
|
jjj
|
||||||
第一列 第二列 第三列
|
|
||||||
```
|
```
|
||||||
|
|
||||||
输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列是以制表符(\t)作为定界符。
|
输出的第一列只包含在aaa.txt中出现的行,第二列包含在bbb.txt中出现的行,第三列包含在aaa.txt和bbb.txt中相同的行。各列之间以制表符(\t)作为分隔符。
|
||||||
|
|
||||||
### 有序比较
|
### 比较排序过的文档
|
||||||
|
|
||||||
有序比较,先通过 sort 将文件内容排序
|
先通过 sort 将文件内容排序:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
[root@localhost ~]# sort aaa.txt > aaa1.txt
|
[root@localhost ~]# sort aaa.txt > aaa1.txt
|
||||||
[root@localhost ~]# sort bbb.txt > bbb1.txt
|
[root@localhost ~]# sort bbb.txt > bbb1.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
有序比较结果:
|
比较结果:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
[root@localhost ~]# comm aaa1.txt bbb1.txt
|
[root@localhost ~]# comm aaa1.txt bbb1.txt
|
||||||
|
|
@ -128,25 +118,6 @@ bbb
|
||||||
ccc
|
ccc
|
||||||
```
|
```
|
||||||
|
|
||||||
**求差**
|
|
||||||
|
|
||||||
打印出两个文件中不相同的行,需要删除第三列:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
[root@localhost text]# comm aaa.txt bbb.txt -3 | sed 's/^\t//'
|
|
||||||
aaa
|
|
||||||
aaa
|
|
||||||
ddd
|
|
||||||
eee
|
|
||||||
111
|
|
||||||
222
|
|
||||||
hhh
|
|
||||||
ttt
|
|
||||||
jjj
|
|
||||||
```
|
|
||||||
|
|
||||||
`sed 's/^\t//'` 是将制表符`\t`删除,以便把两列合并成一列。
|
|
||||||
|
|
||||||
### 差集
|
### 差集
|
||||||
|
|
||||||
通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:
|
通过删除不需要的列,可以得到aaa.txt和bbb.txt的差集:
|
||||||
|
|
@ -173,4 +144,8 @@ jjj
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 注意
|
||||||
|
|
||||||
|
1. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 comm`,`info coreutils 'comm invocation'`。
|
||||||
|
|
||||||
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
||||||
|
|
@ -42,7 +42,7 @@ find(选项)(参数)
|
||||||
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
|
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
|
||||||
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
|
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
|
||||||
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
|
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
|
||||||
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
|
-lname<范本样式>:指定字符串作为寻找符号连接的范本样式;
|
||||||
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
|
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
|
||||||
-maxdepth<目录层级>:设置最大目录层级;
|
-maxdepth<目录层级>:设置最大目录层级;
|
||||||
-mindepth<目录层级>:设置最小目录层级;
|
-mindepth<目录层级>:设置最小目录层级;
|
||||||
|
|
|
||||||
135
command/sort.md
135
command/sort.md
|
|
@ -1,42 +1,86 @@
|
||||||
sort
|
sort
|
||||||
===
|
===
|
||||||
|
|
||||||
将文件进行排序并输出
|
对文本文件中所有行进行排序。
|
||||||
|
|
||||||
## 补充说明
|
## 概要
|
||||||
|
|
||||||
**sort命令** 是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。
|
|
||||||
|
|
||||||
### 语法
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
sort(选项)(参数)
|
sort [OPTION]... [FILE]...
|
||||||
|
sort [OPTION]... --files0-from=F
|
||||||
```
|
```
|
||||||
|
|
||||||
### 选项
|
## 主要用途
|
||||||
|
|
||||||
|
- 将所有输入文件的内容排序后并输出。
|
||||||
|
- 当没有文件或文件为`-`时,读取标准输入。
|
||||||
|
|
||||||
|
## 选项
|
||||||
|
|
||||||
|
排序选项:
|
||||||
```shell
|
```shell
|
||||||
-b:忽略每行前面开始出的空格字符;
|
-b, --ignore-leading-blanks 忽略开头的空白。
|
||||||
-c:检查文件是否已经按照顺序排序;
|
-d, --dictionary-order 仅考虑空白、字母、数字。
|
||||||
-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
|
-f, --ignore-case 将小写字母作为大写字母考虑。
|
||||||
-f:排序时,将小写字母视为大写字母;
|
-g, --general-numeric-sort 根据数字排序。
|
||||||
-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
|
-i, --ignore-nonprinting 排除不可打印字符。
|
||||||
-m:将几个排序号的文件进行合并;
|
-M, --month-sort 按照非月份、一月、十二月的顺序排序。
|
||||||
-M:将前面3个字母依照月份的缩写进行排序;
|
-h, --human-numeric-sort 根据存储容量排序(注意使用大写字母,例如:2K 1G)。
|
||||||
-n:依照数值的大小排序;
|
-n, --numeric-sort 根据数字排序。
|
||||||
-o<输出文件>:将排序后的结果存入制定的文件;
|
-R, --random-sort 随机排序,但分组相同的行。
|
||||||
-r:以相反的顺序来排序;
|
--random-source=FILE 从FILE中获取随机长度的字节。
|
||||||
-t<分隔字符>:指定排序时所用的栏位分隔字符;
|
-r, --reverse 将结果倒序排列。
|
||||||
+<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
|
--sort=WORD 根据WORD排序,其中: general-numeric 等价于 -g,human-numeric 等价于 -h,month 等价于 -M,numeric 等价于 -n,random 等价于 -R,version 等价于 -V。
|
||||||
|
-V, --version-sort 文本中(版本)数字的自然排序。
|
||||||
```
|
```
|
||||||
|
|
||||||
### 参数
|
其他选项:
|
||||||
|
```shell
|
||||||
|
--batch-size=NMERGE 一次合并最多NMERGE个输入;超过部分使用临时文件。
|
||||||
|
-c, --check, --check=diagnose-first 检查输入是否已排序,该操作不会执行排序。
|
||||||
|
-C, --check=quiet, --check=silent 类似于 -c 选项,但不输出第一个未排序的行。
|
||||||
|
--compress-program=PROG 使用PROG压缩临时文件;使用PROG -d解压缩。
|
||||||
|
--debug 注释用于排序的行,发送可疑用法的警报到stderr。
|
||||||
|
--files0-from=F 从文件F中读取以NUL结尾的所有文件名称;如果F是 - ,那么从标准输入中读取名字。
|
||||||
|
-k, --key=KEYDEF 通过一个key排序;KEYDEF给出位置和类型。
|
||||||
|
-m, --merge 合并已排序文件,之后不再排序。
|
||||||
|
-o, --output=FILE 将结果写入FILE而不是标准输出。
|
||||||
|
-s, --stable 通过禁用最后的比较来稳定排序。
|
||||||
|
-S, --buffer-size=SIZE 使用SIZE作为内存缓存大小。
|
||||||
|
-t, --field-separator=SEP 使用SEP作为列的分隔符。
|
||||||
|
-T, --temporary-directory=DIR 使用DIR作为临时目录,而不是 $TMPDIR 或 /tmp;多次使用该选项指定多个临时目录。
|
||||||
|
--parallel=N 将并发运行的排序数更改为N。
|
||||||
|
-u, --unique 同时使用-c,严格检查排序;不同时使用-c,输出排序后去重的结果。
|
||||||
|
-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。
|
||||||
|
--help 显示帮助信息并退出。
|
||||||
|
--version 显示版本信息并退出。
|
||||||
|
|
||||||
文件:指定待排序的文件列表。
|
|
||||||
|
|
||||||
### 实例
|
KEYDEF的格式为:F[.C][OPTS][,F[.C][OPTS]] ,表示开始到结束的位置。
|
||||||
|
F表示列的编号
|
||||||
|
C表示
|
||||||
|
OPTS为[bdfgiMhnRrV]中的一到多个字符,用于覆盖当前排序选项。
|
||||||
|
使用--debug选项可诊断出错误的用法。
|
||||||
|
|
||||||
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
|
|
||||||
|
SIZE 可以有以下的乘法后缀:
|
||||||
|
% 内存的1%;
|
||||||
|
b 1;
|
||||||
|
K 1024(默认);
|
||||||
|
剩余的 M, G, T, P, E, Z, Y 可以类推出来。
|
||||||
|
```
|
||||||
|
|
||||||
|
## 参数
|
||||||
|
|
||||||
|
FILE(可选):要处理的文件,可以为任意数量。
|
||||||
|
|
||||||
|
## 返回值
|
||||||
|
|
||||||
|
返回0表示成功,返回非0值表示失败。
|
||||||
|
|
||||||
|
## 例子
|
||||||
|
|
||||||
|
sort将文件/文本的每一行作为一个单位相互比较,比较原则是从首字符向后依次按ASCII码值进行比较,最后将他们按升序输出。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
root@[mail text]# cat sort.txt
|
root@[mail text]# cat sort.txt
|
||||||
|
|
@ -56,7 +100,7 @@ eee:50:5.5
|
||||||
eee:50:5.5
|
eee:50:5.5
|
||||||
```
|
```
|
||||||
|
|
||||||
忽略相同行使用-u选项或者uniq:
|
忽略相同行使用`-u`选项或者`uniq`:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
[root@mail text]# cat sort.txt
|
[root@mail text]# cat sort.txt
|
||||||
|
|
@ -74,8 +118,6 @@ ccc:30:3.3
|
||||||
ddd:40:4.4
|
ddd:40:4.4
|
||||||
eee:50:5.5
|
eee:50:5.5
|
||||||
|
|
||||||
或者
|
|
||||||
|
|
||||||
[root@mail text]# uniq sort.txt
|
[root@mail text]# uniq sort.txt
|
||||||
aaa:10:1.1
|
aaa:10:1.1
|
||||||
ccc:30:3.3
|
ccc:30:3.3
|
||||||
|
|
@ -84,7 +126,7 @@ bbb:20:2.2
|
||||||
eee:50:5.5
|
eee:50:5.5
|
||||||
```
|
```
|
||||||
|
|
||||||
sort的-n、-r、-k、-t选项的使用:
|
`sort`的`-n、-r、-k、-t`选项的使用:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
[root@mail text]# cat sort.txt
|
[root@mail text]# cat sort.txt
|
||||||
|
|
@ -96,7 +138,7 @@ bbb:10:2.5
|
||||||
eee:40:5.4
|
eee:40:5.4
|
||||||
eee:60:5.1
|
eee:60:5.1
|
||||||
|
|
||||||
#将BB列按照数字从小到大顺序排列:
|
# 将BB列按照数字从小到大顺序排列:
|
||||||
[root@mail text]# sort -nk 2 -t: sort.txt
|
[root@mail text]# sort -nk 2 -t: sort.txt
|
||||||
AAA:BB:CC
|
AAA:BB:CC
|
||||||
bbb:10:2.5
|
bbb:10:2.5
|
||||||
|
|
@ -106,7 +148,8 @@ eee:40:5.4
|
||||||
ccc:50:3.3
|
ccc:50:3.3
|
||||||
eee:60:5.1
|
eee:60:5.1
|
||||||
|
|
||||||
#将CC列数字从大到小顺序排列:
|
# 将CC列数字从大到小顺序排列:
|
||||||
|
# -n是按照数字大小排序,-r是以相反顺序,-k是指定需要排序的栏位,-t指定栏位分隔符为冒号
|
||||||
[root@mail text]# sort -nrk 3 -t: sort.txt
|
[root@mail text]# sort -nrk 3 -t: sort.txt
|
||||||
eee:40:5.4
|
eee:40:5.4
|
||||||
eee:60:5.1
|
eee:60:5.1
|
||||||
|
|
@ -115,23 +158,25 @@ ccc:50:3.3
|
||||||
bbb:10:2.5
|
bbb:10:2.5
|
||||||
aaa:30:1.6
|
aaa:30:1.6
|
||||||
AAA:BB:CC
|
AAA:BB:CC
|
||||||
|
|
||||||
# -n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**-k选项的具体语法格式:**
|
关于`-k`选项的解读和例子:
|
||||||
|
|
||||||
-k选项的语法格式:
|
-k选项深度解读:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
FStart.CStart Modifie,FEnd.CEnd Modifier
|
FStart.CStart Modifier,FEnd.CEnd Modifier
|
||||||
-------Start--------,-------End--------
|
-------Start--------,-------End--------
|
||||||
FStart.CStart 选项 , FEnd.CEnd 选项
|
FStart.CStart 选项 , FEnd.CEnd 选项
|
||||||
```
|
```
|
||||||
|
|
||||||
这个语法格式可以被其中的逗号`,`分为两大部分, **Start** 部分和 **End** 部分。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说`Start`部分的`FStart`和`C.Start`。`C.Start`也是可以省略的,省略的话就表示从本域的开头部分开始。`FStart.CStart`,其中`FStart`就是表示使用的域,而`CStart`则表示在`FStart`域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定`FEnd.CEnd`,如果你省略`.CEnd`,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。
|
这个语法格式可以被其中的逗号`,`分为两大部分,**Start** 部分和 **End** 部分。
|
||||||
|
Start部分由三部分组成,其中的Modifier部分就是我们之前说过的选项部分;
|
||||||
|
我们重点说说`Start`部分的`FStart`和`C.Start`;`C.Start`是可以省略的,省略的话就表示从本域的开头部分开始。`FStart.CStart`,其中`FStart`就是表示使用的域,而`CStart`则表示在`FStart`域中从第几个字符开始算排序首字符。
|
||||||
|
同理,在End部分中,你可以设定`FEnd.CEnd`,如果你省略`.CEnd`或将它设定为0,则表示结尾到本域的最后一个字符。
|
||||||
|
|
||||||
从公司英文名称的第二个字母开始进行排序:
|
|
||||||
|
例子:从公司英文名称的第二个字母开始排序:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ sort -t ' ' -k 1.2 facebook.txt
|
$ sort -t ' ' -k 1.2 facebook.txt
|
||||||
|
|
@ -141,9 +186,10 @@ google 110 5000
|
||||||
guge 50 3000
|
guge 50 3000
|
||||||
```
|
```
|
||||||
|
|
||||||
使用了`-k 1.2`,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。
|
解读:使用了`-k 1.2`,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。
|
||||||
|
|
||||||
只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:
|
|
||||||
|
例子:只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
|
$ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
|
||||||
|
|
@ -153,7 +199,16 @@ sohu 100 4500
|
||||||
guge 50 3000
|
guge 50 3000
|
||||||
```
|
```
|
||||||
|
|
||||||
由于只对第二个字母进行排序,所以我们使用了`-k 1.2,1.2`的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用`-k 1.2`怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了`-k 3,3`,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。
|
解读:由于只对第二个字母进行排序,所以我们使用了`-k 1.2,1.2`的表示方式,表示我们只对第二个字母进行排序(如果你问我使用`-k 1.2`怎么不行?当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。
|
||||||
|
对员工工资进行排序,我们也使用了`-k 3,3`,这是最准确的表述,表示我们只对本域进行排序,因为如果你省略了后面的3,就变成了我们对第3个域开始到最后一个域位置的内容进行排序了。
|
||||||
|
|
||||||
|
|
||||||
|
### 注意
|
||||||
|
|
||||||
|
1. [关于-g和-n选项的区别:stackoverflow](https://stackoverflow.com/questions/1255782/whats-the-difference-between-general-numeric-sort-and-numeric-sort-options)
|
||||||
|
|
||||||
|
2. 关于这个复杂命令的学习,建议您阅读info文档及参考博客、问答网站等。
|
||||||
|
|
||||||
|
3. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 shuf`,`info coreutils 'shuf invocation'`。
|
||||||
|
|
||||||
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
||||||
|
|
@ -1,37 +1,51 @@
|
||||||
uniq
|
uniq
|
||||||
===
|
===
|
||||||
|
|
||||||
报告或忽略文件中的重复行
|
显示或忽略重复的行。
|
||||||
|
|
||||||
## 补充说明
|
## 概要
|
||||||
|
|
||||||
**uniq命令** 用于报告或忽略文件中的重复行,一般与sort命令结合使用。
|
|
||||||
|
|
||||||
### 语法
|
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
uniq(选项)(参数)
|
uniq [OPTION]... [INPUT [OUTPUT]]
|
||||||
```
|
```
|
||||||
|
|
||||||
### 选项
|
## 主要用途
|
||||||
|
|
||||||
|
- 将输入文件(或标准输入)中邻近的重复行写入到输出文件(或标准输出)中。
|
||||||
|
- 当没有选项时,邻近的重复行将合并为一个。
|
||||||
|
|
||||||
|
|
||||||
|
## 选项
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
-c或——count:在每列旁边显示该行重复出现的次数;
|
-c, --count 在每行开头增加重复次数。
|
||||||
-d或--repeated:仅显示重复出现的行列;
|
-d, --repeated 所有邻近的重复行只被打印一次。
|
||||||
-f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
|
-D 所有邻近的重复行将全部打印。
|
||||||
-s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
|
--all-repeated[=METHOD] 类似于 -D,但允许每组之间以空行分割。METHOD取值范围{none(默认),prepend,separate}。
|
||||||
-u或——unique:仅显示出一次的行列;
|
-f, --skip-fields=N 跳过对前N个列的比较。
|
||||||
-w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。
|
--group[=METHOD] 显示所有行,允许每组之间以空行分割。METHOD取值范围:{separate(默认),prepend,append,both}。
|
||||||
|
-i, --ignore-case 忽略大小写的差异。
|
||||||
|
-s, --skip-chars=N 跳过对前N个字符的比较。
|
||||||
|
-u, --unique 只打印非邻近的重复行。
|
||||||
|
-z, --zero-terminated 设置行终止符为NUL(空),而不是换行符。
|
||||||
|
-w, --check-chars=N 只对每行前N个字符进行比较。
|
||||||
|
--help 显示帮助信息并退出。
|
||||||
|
--version 显示版本信息并退出。
|
||||||
```
|
```
|
||||||
|
|
||||||
### 参数
|
## 参数
|
||||||
|
|
||||||
* 输入文件:指定要去除的重复行文件。如果不指定此项,则从标准读取数据;
|
INPUT(可选):输入文件,不提供时为标准输入。
|
||||||
* 输出文件:指定要去除重复行后的内容要写入的输出文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
|
|
||||||
|
|
||||||
### 实例
|
OUTPUT(可选):输出文件,不提供时为标准输出。
|
||||||
|
|
||||||
删除重复行:
|
## 返回值
|
||||||
|
|
||||||
|
返回0表示成功,返回非0值表示失败。
|
||||||
|
|
||||||
|
## 例子
|
||||||
|
|
||||||
|
注意:命令2和命令3结果一样,命令1仅作了相邻行的去重。
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
uniq file.txt
|
uniq file.txt
|
||||||
|
|
@ -39,7 +53,7 @@ sort file.txt | uniq
|
||||||
sort -u file.txt
|
sort -u file.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
只显示单一行:
|
只显示单一行,区别在于是否执行排序:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
uniq -u file.txt
|
uniq -u file.txt
|
||||||
|
|
@ -59,4 +73,10 @@ sort file.txt | uniq -d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### 注意
|
||||||
|
|
||||||
|
1. `uniq`只检测邻近的行是否重复,`sort -u`将输入文件先排序然后再处理重复行。
|
||||||
|
|
||||||
|
2. 该命令是`GNU coreutils`包中的命令,相关的帮助信息请查看`man -s 1 uniq`,`info coreutils 'uniq invocation'`。
|
||||||
|
|
||||||
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
<!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
|
||||||
Loading…
Reference in New Issue