Linux中uniq和sort运行顺序,linux sort uniq命令详解

sort

功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。

sort [-bcdfimMnr][-o][-t][+-][--help][--verison][文件]

-b 忽略每行前面开始处的空格字符 。

-c 检查文件是否已经按照顺序排序。

-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。

-f 排序时,将小写字母视为大写字母。

-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。

-m 将几个排序好的文件进行合并。

-M 将前面3个字母依照月份的缩写进行排序。

-n依照数值的大小排序。

-o 将排序后的结果存入指定的文件。

-r以相反的顺序来排序。

-t 指定排序时所用的栏位分隔字符。

-k  选择以哪个区间进行排序

+- 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

源文件

默认排序

举栗

举栗

banana

apple

pear

orange

apple

pear

1

2

10

1

10

2

apple

apple

banana

orange

pear

pear

-u 在输出行中去除重复行。

1

10

2

apple

banana

orange

pear

-b 忽略每行前面开始处的空格字符。

cat space.txt

cat space1.txt

aaa

nn

tt

3

11

aaa

nn

tt

3

11

sort space.txt

sort space1.txt

sort -b space.txt

aaa

nn

3

tt

11

11

3

aaa

nn

tt

11

3

aaa

nn

tt

-o 把排序结果输出到原文件中

使用重定向:

sort test.txt>test.txt 后

test.txt为空

sort test.txt -o test.txt

cat test.txt

1

10

2

apple

apple

banana

orange

pear

pear

-t 指定排序时所用的栏位分隔字符。

-k  选择以哪个区间进行排序

cat date.txt

2017-12-02

2017-01-09

2017-10-23

2017-04-24

sort -n -k 2 -t'-' date.txt

2017-01-09

2017-04-24

2017-10-23

2017-12-02

-n 依照数值的大小排序。

sort -n test.txt

apple

apple

banana

orange

pear

pear

1

2

10

sort 默认情况下会将数字按照字符串来排序,

所以会出现2比10大的情况。使用-n能避免该情况

-c 检查文件是否已经按照顺序排序

sort -c 排好序的文件,无返回信息,echo $?为0

sort -c 未排序文件,有提示信息,echo $?为1

-r 以相反的顺序来排序

cat test.txt

1

11

2

34

sort -n -r test.txt

34

11

2

1

uniq

[-cdu][-f][-s][-w][--help][--version][输入文件][输出文件]

-u或--unique 只保留出现唯一一次的行列。

-d或--repeated 仅显示重复出现的行列,出现一次的行列不会显示

-c 在每列旁边显示该行重复出现的次数。

-f n 或--skip-fields=n 忽略前N个字段。字段由空白字符(空格符、Tab)分隔

-s或--skip-chars= 忽略比较指定的字符。-s n:忽略前n个字符,从n+1个字符开始比较

-w或--check-chars= 指定要比较的字符。-w n:只比较前n个字符,对每行第n个字符以后的内容不作对照

-i, --ignore-case在比较的时候不区分大小写

[输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;

[输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

uniq 是对排序好的内容去重当重复的行并不相邻时,uniq 命令是不起作用的,所以需要先使用sort排序,在使用uniq去重

举栗:

原文件

默认去重

仅显示出现一次的行 -u

e bsd 1000 600 4M

c Debian 600 200 8K

b linux 1000 200 5K

a mac 2000 500 2K

f SUSE 4000 300 6M

c win7 2000 100 7G

d winxp 4000 300 3G

d winxp 500 300 3G

g winxp 500 300 3G

g winxp 500 300 3G

G WINXP 500 300 3G

uniq -c test_uniq.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

1 d winxp 4000 300 3G

1 d winxp 500 300 3G

2 g winxp 500 300 3G

1 G WINXP 500 300 3G

uniq -u -c test_uniq.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

1 d winxp 4000 300 3G

1 d winxp 500 300 3G

1 G WINXP 500 300 3G

不显示出现多次的行

仅显示重复出现的行 -d

比较的时候不区分大小写 -i

uniq -d -c test_uniq.txt

2 g winxp 500 300 3G

不显示只出现一次的行

uniq -i -c test_uniq.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

1 d winxp 4000 300 3G

1 d winxp 500 300 3G

3 g winxp 500 300 3G

不区分大小写,所以有三行进行的合并

比较时忽略前n个字段,从n+1列开始比较 -f n

比较时忽略前n个字符,从n+1个字符开始比较 -s n

uniq -c -f 3 test_uniq.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

1 d winxp 4000 300 3G

4 d winxp 500 300 3G

源文件

注意空格符

a b 30 3G

a h 30 3G

a g 30 3G

a ffff 30 3G

uniq -c -f 2 test.txt

1 a b 30 3G

1 a h 30 3G

2 a g 30 3G

忽略前2个字段时,前2个字段中的字符以及空格不同都不会有影响,但是第2个字段之后的空格与字符变化会影响去重效果

uniq -c -s 1 test_uniq.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

1 d winxp 4000 300 3G

3 d winxp 500 300 3G

1 G WINXP 500 300 3G

忽略前1个字符,

d winxp 500 300 3G跟g winxp 500 300 3G会被认为是一样的

只比较前n个字符,对每行第n个字符以后的内容不作对照 -w n

指定输出文件

uniq -c -w 1 test_uniq.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

2 d winxp 4000 300 3G

2 g winxp 500 300 3G

1 G WINXP 500 300 3G

uniq -c test_uniq.txt out.txt

cat out.txt

1 e bsd 1000 600 4M

1 c Debian 600 200 8K

1 b linux 1000 200 5K

1 a mac 2000 500 2K

1 f SUSE 4000 300 6M

1 c win7 2000 100 7G

1 d winxp 4000 300 3G

1 d winxp 500 300 3G

2 g winxp 500 300 3G

1 G WINXP 500 300 3G

默认去重,将去重结果保存到out.txt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值