Chinaunix首页 | 论坛 | 博客
  • 博客访问: 168659
  • 博文数量: 134
  • 博客积分: 1215
  • 博客等级: 少尉
  • 技术积分: 564
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-20 11:04
文章分类

全部博文(134)

文章存档

2017年(88)

2012年(46)

我的朋友

分类: LINUX

2012-04-25 11:43:58

sort,uniq,cut参数详解(2009-04-14 15:22:58)
标签: it 杂谈
sort [options] [files]

常见参数:
-b, --ignore-leading-blanks
忽略每行前面开始处的空格和tab字符
-c, --check
检查文件是否已经排序,如果输入文件排序不正确,就返回一个非零值。
-d, --dictionary-order
按字典顺序,即对英文字母、数字及空格字符排序
-f, --ignore-case
排序时,忽略大小写的区别,全部作为大写字母进行
-g, --general-numeric-sort
按常规数字顺序排序
--help
帮助信息
-i, --ignore-nonprinting
忽略不可打印的字符(即指非八进制040~176之间的ASCII字符)排序
-k n[,m] , --key=n[,m]
指定一个或几个字段作为排序关键字,字段位置从n开始,到m为止(包括n,不包括m)。如不指定m,则关键字为从n到行尾。字段和字符的位置从0开始,第一列为1。
-n
按算术大小排序
-ofile, --output=file
将排序结果保存成指定的文件,而非输出到屏幕
-m, --merge
合并几个已经排序的文件
-r, --reverse
反向排序
-s, --stable
关闭最后重排的动作,实现稳定排序
-t:, --field-separator=:
指定列分隔符,默认是tab
-u, --unique
对排序后认为相同的行只留其中一行
-z, --zero-terminated
结束行为0字符,而非新行(\n)字符
--version
显示版本信息
-M, --month-sort
将前3个字母(不含空格、忽略大小写)按照月份缩写进行排序,非月份缩写的行则排在最后,如JAN < FEB
-Ssize, --buffer-size=size
设置多大的缓存,默认1024K,可使用M指定
-T tempdir, --temporary-directory=dir
存放临时文件的目录
最有趣的应该是-t参数了,举个例子:
# more test.txt
time0 | userA | a | 1
time3 | userD | d | 3
time1 | userC | c | 4
time2 | userB | b | 2
如果我要按第一列来排序,后面的对应关系还不能错,就要用到-t参数了:sort的-t选项可以实现cut的-d功能,再利用+m -n参数可以实现cut的-f的功能,只是,sort的这个+m -n是从0开始计数的。+m -n是指从第m个字段开始,到第n个字段排序,其中包含第m个但不包含第n个
比如:以下就定义 “|” 为一个字段。
# sort -t "|" +0 -1 test.txt
time0 | userA | a | 1
time1 | userC | c | 4
time2 | userB | b | 2
time3 | userD | d | 3
这个 +0 -1 就表示第一列。
那么要按第二列或者第三列排序呢?
# sort -t "|" +1 -2 test.txt
time0 | userA | a | 1
time2 | userB | b | 2
time1 | userC | c | 4
time3 | userD | d | 3

# sort -t "|" +2 -3 test.txt
time0 | userA | a | 1
time2 | userB | b | 2
time1 | userC | c | 4
time3 | userD | d | 3

# sort -t "|" +3 -4 test.txt
time0 | userA | a | 1
time2 | userB | b | 2
time3 | userD | d | 3
time1 | userC | c | 4
另一个例子:
192.168.19.11
192.168.19.12
192.168.19.8
192.168.19.9
192.168.21.11
192.168.21.12
192.168.21.9
192.168.21.10
192.168.21.5
192.168.19.10

sort -n -t "." +2 -3 +3 -4 sort.txt
192.168.19.8
192.168.19.9
192.168.19.10
192.168.19.11
192.168.19.12
192.168.21.5
192.168.21.9
192.168.21.10
192.168.21.11
192.168.21.12

-k的例子:按不同列排序
[root@test1 tmp]# more 1.txt
c 2 F
a 3 H
b 1 G
[root@test1 tmp]# sort -k1 1.txt
a 3 H
b 1 G
c 2 F
[root@test1 tmp]# sort -k2 1.txt
b 1 G
c 2 F
a 3 H
[root@test1 tmp]# sort -k3 1.txt
c 2 F
b 1 G
a 3 H

uniq [options] [files]

常用参数:

-c 在输出行前面加上每行在输入文件中出现的次数。


-d 仅显示重复行。


-f Fields 忽略由 Fields 变量指定的字段数目。 如果 Fields 变量的值超过输入行中的字段数目, uniq 命令用空字符串进行比较。 这个标志和 -Fields 标志是等价的。


-u 仅显示不重复的行。


-s Characters 忽略由 Characters 变量指定的字符的数目。 如果 Characters 变量的值超过输入行中的字符的数目, uniq 用空字符串进行比较。 如果同时指定 -f 和 -s 标志, uniq 命令忽略由 -s Characters 标志指定的字符的数目,而从由 -f Fields 标志指定的字段后开始。 这个标志和 +Characters 标志是等价的。


-Fields 忽略由 Fields 变量指定的字段数目。 这个标志和 -f Fields 标志是等价的。
+Characters 忽略由 Characters 变量指定的字符的数目。 如果同时指定 - Fields 和 +Characters 标志, uniq 命令忽略由 +Characters 标志指定的字符数目,并从由 -Fields 标志指定的字段后开始。 这个标志和 -s Characters 标志是等价的。

cut

cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。

cut options file1 file2

参数:

-c list 指定剪切字符数

-f field 指定剪切域数

-d 指定与空格和tab键不同的域分隔符

-c 1,5-7 剪切第1个字符,然后是第5到第7个字符

-c1-50 剪切前50个字符

-f 格式与-c相同

-f 1,5 剪切第1域和第5域

-f 1,7-9 剪切第1域,第10域到第12域

eg:

cut -f2- -d "1" 打印以1为域分隔符的第2到最后一域

阅读(2031) | 评论(0) | 转发(0) |
1

上一篇:没有了

下一篇:oracle的SQL经典练习助手!

给主人留下些什么吧!~~