免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 116099 | 回复: 56

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)  关闭 [复制链接]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-02 12:30 |显示全部楼层
shell基础1:文件安全与权限
http://bbs.chinaunix.net/forum/viewtopic.php?t=434579&highlight=wingger

附:Linux的用户和用户组管理
http://bbs.chinaunix.net/forum/viewtopic.php?t=438660&highlight=wingger

shell基础二:查找技巧,find及xargs的使用
http://bbs.chinaunix.net/forum/viewtopic.php?t=441883&highlight=wingger

shell基础三和四:后台(crontab,at,&,nohup)及(*,?,[]等)
http://bbs.chinaunix.net/forum/viewtopic.php?t=442596&highlight=wingger

shell基础五:输入和输出(echo,read,cat,管道,tee,重定向等)
http://bbs.chinaunix.net/forum/viewtopic.php?t=444209&highlight=wingger

shell基础六七:命令执行顺序(||及&&,{}及())和正则表?
http://bbs.chinaunix.net/forum/viewtopic.php?t=445229&highlight=wingger

shell基础八:文本过滤工具(grep)
http://bbs.chinaunix.net/forum/viewtopic.php?t=446683&highlight=wingger

http://bbs.chinaunix.net/forum/viewtopic.php?t=448687&highlight=wingger
shell基础九:awk

http://bbs.chinaunix.net/forum/viewtopic.php?t=452942&highlight=wingger
shell基础十:sed

http://bbs.chinaunix.net/forum/viewtopic.php?t=457730&highlight=wingger
基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

shell基础十二:tr
http://bbs.chinaunix.net/forum/viewtopic.php?t=459099&highlight=wingger


" 实用的分类(s o r t)操作。
" uniq。
" join。
" cut。
" paste。
" split。


sort用法
s o r t命令选项很长,下面仅介绍各种选项。

选项
s o r t命令的一般格式为:

  1. sort -cmu -o output_file [other options] +pos1 +pos2 input_files
复制代码


下面简要介绍一下s o r t的参数:
-c 测试文件是否已经分类。
-m 合并两个分类文件。
-u 删除所有复制行。
-o 存储s o r t结果的输出文件名。


其他选项有:
-b 使用域进行分类时,忽略第一个空格。
-n 指定分类是域上的数字分类。
-t 域分隔符;用非空格或t a b键分隔域。
-r 对分类次序或比较求逆。
+n n为域号。使用此域号开始分类。
n n为域号。在分类比较时忽略此域,一般与+ n一起使用。
post1 传递到m,n。m为域号,n为开始分类字符数;例如4,6意即以第5域分类,从第7个字符开始。


保存输出
- o选项保存分类结果,然而也可以使用重定向方法保存。下面例子保存结果到r e s u l t s . o u t:
  1. $sort video.txt >results.out
复制代码


启动方式
缺省情况下, s o r t认为一个空格或一系列空格为分隔符。要加入其他方式分隔,使用- t选s o r t执行时,先查看是否为域分隔设置了- t选项,如果设置了,则使用它来将记录分隔成域0、域1等等
;如果未设置,用空格代替。缺省时s o r t将整个行排序,指定域号的情况例外。

下面是文件v i d e o . t x t的清单,包含了上个季度家电商场的租金情况。各域为:(1)名称,(2)供货区代码,(3)本季度租金,(4)本年租金。域分隔符为冒号。为此对此例需使用‘ - t’选项。文件如下:
  1. [sam@chenwy sam]$ cat video.txt
  2. Boys in Company C:HK:192:2192
  3. Alien:HK:119:1982
  4. The Hill:KL:63:2972
  5. Aliens:HK:532:4892
  6. Star Wars:HK:301:4102
  7. A Few Good Men:KL:445:5851
  8. Toy Story:HK:239:3972
复制代码


sort对域的参照方式
关于s o r t的一个重要事实是它参照第一个域作为域0,域1是第二个域,等等。s o r t也可以使用整行作为分类依据。

文件是否已分类
怎样分辨文件是否已分类?如果只有3 0行,看看就知道了,但如果是4 0 0行呢,使用s o r t - c通知s o r t文件是否按某种顺序分类。

  1. [sam@Linux_chenwy sam]$ sort -c video.txt
  2. sort: video.txt:2: disorder: Alien:HK:119:1982
复制代码

结果显示未分类,

现在将之分类,再试一次:
  1. [sam@Linux_chenwy sam]$ sort -t:  video.txt >video2.txt
  2. [sam@Linux_chenwy sam]$ sort -c video2.txt
  3. [sam@Linux_chenwy sam]$
复制代码

返回提示符表明已分类。然而如果测试成功,返回一个信息行会更好。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-02 13:19 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

基本sort
最基本的s o r t方式为sort filename,按第一域进行分类(分类键0)。实际上读文件时s o r t操作将行中各域进行比较,这里返回基于第一域s o r t的结果
  1. [sam@Linux_chenwy sam]$ sort -t: video.txt
  2. A Few Good Men:KL:445:5851
  3. Alien:HK:119:1982
  4. Aliens:HK:532:4892
  5. Boys in Company C:HK:192:2192
  6. Star Wars:HK:301:4102
  7. The Hill:KL:63:2972
  8. Toy Story:HK:239:3972
复制代码


sort分类求逆
如果要逆向s o r t结果,使用- r选项。在通读大的注册文件时,使用逆向s o r t很方便。下面是按域0分类的逆向结果。
  1. [sam@Linux_chenwy sam]$ sort -t: -r video.txt
  2. Toy Story:HK:239:3972
  3. The Hill:KL:63:2972
  4. Star Wars:HK:301:4102
  5. Boys in Company C:HK:192:2192
  6. Aliens:HK:532:4892
  7. Alien:HK:119:1982
  8. A Few Good Men:KL:445:5851
复制代码


按指定域分类
有时需要只按第2域(分类键1)分类。这里为重排报文中供应区代码,使用t 1,意义为按分类键1分类。下面的例子中,所有供应区代码按分类键1分类;注意分类键2和3对应各域也被分类。
  1. [sam@Linux_chenwy sam]$ sort -t: +1 video.txt
  2. Alien:HK:119:1982
  3. Boys in Company C:HK:192:2192
  4. Toy Story:HK:239:3972
  5. Star Wars:HK:301:4102
  6. Aliens:HK:532:4892
  7. A Few Good Men:KL:445:5851
  8. The Hill:KL:63:2972
复制代码

前几个第二域都是HK,第三域:119,192,301,489,532,63,按第一个数字分了,因此必须指定多域及数值域

数值域分类
依此类推,要按第三分类键分类,使用t 3。但是因为这是数值域,即为数值分类,可以使用- n选项。下面例子为按年租金分类命令及结果:
  1. [sam@Linux_chenwy sam]$ sort -t: +3n video.txt
  2. Alien:HK:119:1982
  3. Boys in Company C:HK:192:2192
  4. The Hill:KL:63:2972
  5. Toy Story:HK:239:3972
  6. Star Wars:HK:301:4102
  7. Aliens:HK:532:4892
  8. A Few Good Men:KL:445:5851
复制代码


如果不指定n,如下
  1. [sam@Linux_chenwy sam]$ sort -t: +2 video.txt
  2. Alien:HK:119:1982
  3. Boys in Company C:HK:192:2192
  4. Toy Story:HK:239:3972
  5. Star Wars:HK:301:4102
  6. A Few Good Men:KL:445:5851
  7. Aliens:HK:532:4892
  8. The Hill:KL:63:2972
复制代码

o r t只查看第3域每个数值的第一个数,并按其分类,然后再按第二个数依次下去。
  1. [sam@Linux_chenwy sam]$ sort -t: +2n video.txt
  2. The Hill:KL:63:2972
  3. Alien:HK:119:1982
  4. Boys in Company C:HK:192:2192
  5. Toy Story:HK:239:3972
  6. Star Wars:HK:301:4102
  7. A Few Good Men:KL:445:5851
  8. Aliens:HK:532:4892
复制代码


数值域倒序:
  1. [sam@Linux_chenwy sam]$ sort -t: +2nr video.txt
  2. Aliens:HK:532:4892
  3. A Few Good Men:KL:445:5851
  4. Star Wars:HK:301:4102
  5. Toy Story:HK:239:3972
  6. Boys in Company C:HK:192:2192
  7. Alien:HK:119:1982
  8. The Hill:KL:63:2972
复制代码


唯一性分类
有时,原文件中有重复行,这时可以使用- u选项进行唯一性(不重复)分类以去除重复行,本例中A l i e n有相同的两行。带重复行的文件如下,其中A l i e n插入了两次:
  1. [sam@Linux_chenwy sam]$ echo "Aliens:HK:532:4892" >> video.txt
  2. [sam@Linux_chenwy sam]$ cat video.txt
  3. Boys in Company C:HK:192:2192
  4. Alien:HK:119:1982
  5. The Hill:KL:63:2972
  6. Aliens:HK:532:4892
  7. Star Wars:HK:301:4102
  8. A Few Good Men:KL:445:5851
  9. Toy Story:HK:239:3972
  10. Aliens:HK:532:4892
复制代码


使用- u选项去除重复行,不必加其他选项, s o r t会自动处理。
  1. [sam@Linux_chenwy sam]$ sort -u video.txt
  2. A Few Good Men:KL:445:5851
  3. Alien:HK:119:1982
  4. Aliens:HK:532:4892
  5. Boys in Company C:HK:192:2192
  6. Star Wars:HK:301:4102
  7. The Hill:KL:63:2972
  8. Toy Story:HK:239:3972
复制代码


使用k的其他sort方法
s o r t还有另外一些方法指定分类键。可以指定k选项,第1域(分类键)以1开始。不要与前面相混淆。其他选项也可以使用k,主要用于指定分类域开始的字符数目。
使用- k 4,按年租金分类的次序。
  1. [sam@Linux_chenwy sam]$ sort -t: -k4 video.txt
  2. A alien:HK:119:1982
  3. Alien:HK:119:1982
  4. Boys in Company C:HK:192:2192
  5. A the Hill:KL:63:2972
  6. The Hill:KL:63:2972
  7. Toy Story:HK:239:3972
  8. Star Wars:HK:301:4102
  9. Aliens:HK:532:4892
  10. Aliens:HK:532:4892
  11. A Few Good Men:KL:445:5851
复制代码


用k做分类键排序
可以指定分类键次序。先以第4域,再以第1域分类,命令为-k4 -k1,也可以反过来,以便在文件首行显示最高年租金,方法如下:
  1. [sam@Linux_chenwy sam]$ sort -t: -k4 -k1  video.txt
  2. AAlien:HK:119:1982
  3. Alien:HK:119:1982
  4. Boys in Company C:HK:192:2192
  5. The Hill:KL:63:2972
  6. Toy Story:HK:239:3972
  7. Star Wars:HK:301:4102
  8. Aliens:HK:532:4892
  9. A Few Good Men:KL:445:5851
复制代码

  1. [sam@Linux_chenwy sam]$ sort -t: -k4 -k1 -r  video.txt
  2. A Few Good Men:KL:445:5851
  3. Aliens:HK:532:4892
  4. Star Wars:HK:301:4102
  5. Toy Story:HK:239:3972
  6. The Hill:KL:63:2972
  7. Boys in Company C:HK:192:2192
  8. Alien:HK:119:1982
  9. AAlien:HK:119:1982
复制代码

这里-r是对第四域反排序?


  1. [sam@Linux_chenwy sam]$ sort -t: -k1  video.txt
  2. AAlien:HK:119:1982
  3. A Few Good Men:KL:445:5851
  4. Alien:HK:119:1982
  5. Aliens:HK:532:4892
  6. Boys in Company C:HK:192:2192
  7. Star Wars:HK:301:4102
  8. The Hill:KL:63:2972
  9. Toy Story:HK:239:3972
复制代码

  1. [sam@Linux_chenwy sam]$ sort -t: -k1 -k4  video.txt
  2. AAlien:HK:119:1982
  3. A Few Good Men:KL:445:5851
  4. Alien:HK:119:1982
  5. Aliens:HK:532:4892
  6. Boys in Company C:HK:192:2192
  7. Star Wars:HK:301:4102
  8. The Hill:KL:63:2972
  9. Toy Story:HK:239:3972
复制代码

  1. [sam@Linux_chenwy sam]$ sort -t: -k1 -k4 -r  video.txt
  2. Toy Story:HK:239:3972
  3. The Hill:KL:63:2972
  4. Star Wars:HK:301:4102
  5. Boys in Company C:HK:192:2192
  6. Aliens:HK:532:4892
  7. Alien:HK:119:1982
  8. A Few Good Men:KL:445:5851
  9. AAlien:HK:119:1982
复制代码

对第一域进行反排序?

换成第3域
  1. [sam@Linux_chenwy sam]$ sort -t:  +2nr -k1 -r  video.txt
  2. Aliens:HK:532:4892
  3. A Few Good Men:KL:445:5851
  4. Star Wars:HK:301:4102
  5. Toy Story:HK:239:3972
  6. Boys in Company C:HK:192:2192
  7. Alien:HK:119:1982
  8. AAlien:HK:119:1982
  9. The Hill:KL:63:2972
复制代码

对第三域进行倒序,再对第一域排序,最后把第一域倒序?

  1. [sam@Linux_chenwy sam]$ sort -t:  +2nr -k1  video.txt
  2. Aliens:HK:532:4892
  3. A Few Good Men:KL:445:5851
  4. Star Wars:HK:301:4102
  5. Toy Story:HK:239:3972
  6. Boys in Company C:HK:192:2192
  7. AAlien:HK:119:1982
  8. Alien:HK:119:1982
  9. The Hill:KL:63:2972
复制代码


指定sort序列
可以指定分类键顺序,也可以使用- n选项指定不使用哪个分类键进行查询。看下面的s o r t命令:
  1. [sam@Linux_chenwy sam]$ sort +0 -2 +3 video.txt
复制代码

该命令意即开始以域0分类,忽略域2,然后再使用域3分类。

论坛徽章:
0
发表于 2004-12-02 16:43 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

从以前的帖子里看到了这个,即包括sort又包括cut,还有很cool的nl.实在佩服,借该贴拜一个。

nl -ba file | sort -nr | cut -f 2 > new.file

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-02 20:36 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

pos用法
指定开始分类的域位置的另一种方法是使用如下格式:
  1. sort +field_number.characters_in
复制代码

意即从f i e l d _ n u m b e r开始分类,但是要在此域的第c h a r a c t e r s _ i n个字符开始。

如:
  1. [sam@chenwy sam]$ cat video.txt
  2. Boys in Company C:HK48:192:2192
  3. Alien:HK57:119:1982
  4. The Hill:KL223:63:2972
  5. Aliens:HK11:532:4892
  6. Star Wars:HK38:301:4102
  7. A Few Good Men:KL87:445:5851
  8. Toy Story:HK65:239:3972
复制代码


要只使用供应区代码后缀部分将文件分类,其命令为+ 1 . 2,意即以第1域最左边第3个字符开始分类
  1. [sam@chenwy sam]$ sort -t: +1.2 video.txt
  2. Aliens:HK11:532:4892
  3. The Hill:KL223:63:2972
  4. Star Wars:HK38:301:4102
  5. Boys in Company C:HK48:192:2192
  6. Alien:HK57:119:1982
  7. Toy Story:HK65:239:3972
  8. A Few Good Men:KL87:445:5851
复制代码


比较一下加n,呵呵,其实区码并不需要加n
  1. [sam@chenwy sam]$ sort -t: +1.2n video.txt
  2. Aliens:HK11:532:4892
  3. Star Wars:HK38:301:4102
  4. Boys in Company C:HK48:192:2192
  5. Alien:HK57:119:1982
  6. Toy Story:HK65:239:3972
  7. A Few Good Men:KL87:445:5851
复制代码

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-02 20:48 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

转一贴子:sort

http://www.gnu.org/manual/

Jacek Artymiak(jacek@artymiak.com)
自由作家和顾问
2003 年 3 月 6 日

通过使用 sort 和 tsort,而不是采取使用 Perl 或 Awk 的较复杂的解决方案,可以节省时间,同时还能避免令人头疼的问题。Jacek Artymiak 将向您说明如何做到这一点。
尽管可以用 Perl 或 Awk 编写高级排序应用程序,但并非总是有此必要,而且这样的工作也常常令人感到头疼。使用 sort 命令,您同样可以实现您所需的大多数功能,而且更容易,它可以对多个文件中的行进行排序、合并文件甚至可以查看是否有必要对它们进行排序。您可以指定排序键(用于比较的行中的一部分),也可不指定,后一种情况下 sort 就比较所有行。

因此,如果您想对密码文件进行排序,就可以使用下列命令(请注意,您不能将输出直接发送到输入文件,因为这会破坏输入文件。这就是为何您需要将它发送到临时文件中,然后将该文件重命名为 /etc/passwd 的原因,如下所示)。

1、清单 1. 简单排序
  1. $ su -
  2. # sort /etc/passwd > /etc/passwd-new
  3. # mv /etc/passwd-new /etc/passwd
复制代码
       

2、有关 sort 和 tsort 的更多信息
通过打开有关排序操作的 GNU 手册页来学习手册页中的内容,或者通过在命令行中输入 man sort 或 man tsort 在新的终端窗口的手册页或信息页中查看这些选项。
如果您想倒转排序的次序,则应当使用 -r 选项。您还可以用 -u 选项来禁止打印相同的行。

3、sort 的一个非常实用的特性是它用字段键进行排序的能力。字段是一个文本字符串,通过某个字符与其它字段分隔开。例如,/etc/passwd 中的字段是用冒号(:)分隔的。因此,如果愿意的话,您可以按照用户标识、组标识、注释字段、主目录或 shell 对 /etc/passwd 进行排序。要做到这一点,请使用 -t 选项,其后跟着用作分隔符的字符,接着是用作排序键的字段编号,再跟作为键的最后一个字段的编号;
例如,
  1. sort -t : -k 5,5 /etc/passwd
复制代码

按照注释字段对密码文件进行排序,该字段中存储了完整的用户名(如“John Smith”)。


  1. sort -t : -k 3,4 /etc/passwd
复制代码

同时使用用户标识和组标识对同一个文件进行排序。如果您省略了第二个数字,那么 sort 会假定键是从给定的字段开始,一直到每一行的末尾。动手试一试,并观察其中的区别(当数字排序看上去有错时,请添加 -g 选项)。

还要注意的是,空白过渡是缺省的分隔符,因此,如果字段已经用空白字符分隔了,那么您可以省略分隔符,只使用 -t(另注:字段的编号是从 1 开始的)。

5、为了更好地进行控制,您可以使用键和偏移量。偏移量是用点与键相分隔的,比如在 -k 1.3,5.7 中,表示排序键应当从第 1 个字段的第 3 个字符开始,到第 5 个字段的第 7 个字符结束(偏移量也是从 1 开始编号的)。何时会用得着偏移量呢?嗯,我时常用它来对 Apache 日志进行排序;键和偏移量表示法让我跳过了日期字段。

6、另一个要关注的选项是 -b,它告知 sort 忽略空白字符(空格、跳格等等)并将行中的第一个非空白字符当做是排序键的开始。还有,如果您使用该选项,那么将从第一个非空白字符开始计算偏移量(当字段分隔符不是空白字符,且字段可能包含以空白字符开头的字符串时,这非常有用)。

可以用下面这些选项来进一步修改排序算法:
-d(只将字母、数字和空白用作排序键)、
-f(关闭大小写区分,认为小写和大写字符是一样的)、
-i(忽略非打印的 ASCII 字符)、
-M(使用三个字母的月份名称缩写:JAN、FEB、MAR … 来对行进行排序)和
-n(只用数字、- 和逗号或另外一个千位分隔符对行进行排序)。
这些选项以及 -b 和 -r 选项可以用作键编号的一部分,
在这种情况下,它们只适用于该键而非全局,其作用就跟在键定义外使用它时一样。


以键编号的用法为例,请考虑:

  1. sort -t: -k 4g,4 -k 3gr,3 /etc/passwd
复制代码


这条命令将按照组标识对 passwd 文件进行排序,而在组内按照用户标识进行逆向排序。

7、如果您所使用的键不能用来确定哪一行是在先,那么它也可以解决这类平局问题。增加一个解决平局问题的提示,请添加另一个 -k 选项,让它跟在字段和(可选的)偏移量后面,使用与前面用于定义键相同的表示法;
例如,
  1. sort -k 3.4,4.5 -k 7.3,9.4 /etc/passwd
复制代码

对行进行排序时,使用从第 3 个键的第 4 个字符开始到第 4 个键的第 5 个字符结束的键,然后再采用从第 7 个字段的第 3 个字符到第 9 个字段的第 4 个字符结束的键来解决上述难题。

8、最后一组选项处理输入、输出和临时文件。例如,-c 选项,当它用于 sort -c < file 中时,它检查输入文件是否已进行了排序(您也可以使用其它选项),如果已进行了排序,则报告一个错误。这样,在处理可能需要花很长时间进行排序的大型文件之前,可以很方便地对其进行检查。当您将 -u 选项和 -c 选项一起使用时,会被解释为一个请求:检查输入文件中不存在两个相同的行。

9、当您处理大型文件时还有一个很重要的 -T 选项,它用于为临时文件(这些临时文件在 sort 完成工作之后会被除去)指定其它目录,而不是缺省的 /tmp 目录。

10、您可以使用 sort 来同时处理多个文件,这样做的方式基本上有两种:首先可以使用 cat 来并置它们,如下所示:

  1. cat file1 file2 file3 | sort > outfile
复制代码


或者,可以使用下面这个命令:

  1. sort -m file1 file2 file3 > outfile
复制代码


第二种情况有个条件:在将所有输入文件一起进行 sort -m 之前,每个文件都必须经过排序。这看起来似乎是个不必要的负担,但事实上这加快了工作速度并节约了宝贵的系统资源。对了,别忘了 -m 选项。在这里您可以使用 -u 选项来禁止打印相同的行。

11、如果需要某种更深奥的排序方法,您可能要查看 tsort 命令,该命令对文件执行拓扑排序。拓扑排序和标准 sort 之间的差别如清单 2 所示(您可以从参考资料下载 happybirthday.txt)。

清单 2. 拓扑排序和标准排序之间的差别

  1. $ cat happybirthday.txt

  2. Happy Birthday to You!

  3. Happy Birthday to You!

  4. Happy Birthday Dear Tux!

  5. Happy Birthday to You!
复制代码

  1. $ sort happybirthday.txt

  2. Happy Birthday Dear Tux!

  3. Happy Birthday to You!

  4. Happy Birthday to You!

  5. Happy Birthday to You!
复制代码

  1. $ tsort happybirthday.txt

  2. Dear

  3. Happy

  4. to

  5. Tux!

  6. Birthday

  7. You!
复制代码



当然,对于 tsort 的使用来说,这并非一个非常有用的演示,只是举例说明了这两个命令输出的不同。

tsort 通常用于解决一种逻辑问题,即必须通过观察到的部分次序预测出整个次序;例如(来自 tsort 信息页中):

  1. tsort <<EOF a b c d e f b c d e EOF
复制代码


会产生这样的输出


  1.       a
  2.       b
  3.       c
  4.       d
  5.       e
  6.       f
复制代码


tsort的没试过,最后一个我不行耶,不知道咋回事

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-02 22:18 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

使用head和tail将输出分类
分类操作时,不一定要显示整个文件或一页以查看s o r t结果中的第一和最后一行。如果只显示最高年租金,按第4域分类- k 4并求逆,然后使用管道只显示s o r t输出的第一行,此命令为h e a d,可以指定查阅行数。如果只有第一行,则为head -1:

  1. [sam@chenwy sam]$ sort -t: -k4r video.txt
  2. A Few Good Men:KL87:445:5851
  3. Aliens:HK11:532:4892
  4. Star Wars:HK38:301:4102
  5. Toy Story:HK65:239:3972
  6. The Hill:KL223:63:2972
  7. Boys in Company C:HK48:192:2192
  8. Alien:HK57:119:1982
复制代码

  1. [sam@chenwy sam]$ sort -t: -k4r video.txt | head -1
  2. A Few Good Men:KL87:445:5851
复制代码

  1. [sam@chenwy sam]$ sort -t: -k4r video.txt | head -2
  2. A Few Good Men:KL87:445:5851
  3. Aliens:HK11:532:4892
复制代码


要查阅最低年租金,使用t a i l命令与h e a d命令刚好相反,它显示文件倒数几行。1为倒数一行,2为倒数两行等等。查阅最后一行为tail -1。结合上述的s o r t命令和t a i l命令显示最低年租金:
  1. [sam@chenwy sam]$ sort -t: -k4r video.txt | tail -1
  2. Alien:HK57:119:1982
复制代码

  1. [sam@chenwy sam]$ sort -t: -k4r video.txt | tail -2
  2. Boys in Company C:HK48:192:2192
  3. Alien:HK57:119:1982
复制代码


可以使用h e a d或t a i l查阅任何大的文本文件, h e a d用来查阅文件头,基本格式如下:
  1. head [how_many_lines_to_display] file_name
复制代码


Ta i l用来查阅文件尾,基本格式为:
  1. tail [how_many_lines_to_display] file_name
复制代码


如果使用h e a d或t a i l时想省略显示行数,缺省时显示1 0行。
要查阅文件前2 0行:
  1. [sam@chenwy sam]$ head -20 passwd
复制代码


要查阅文件后10行:
  1. [sam@chenwy sam]$ tail -10 passwd
复制代码

论坛徽章:
0
发表于 2004-12-02 23:20 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

[quote]原帖由 "wingger"]n n为域号。在分类比较时忽略此域,一般与+ n一起使用。 [/quote 发表:

不准确。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-02 23:28 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

原帖由 "lightspeed" 发表:

不准确。


那怎么样才准确呢?我里面有几个问题耶,帮忙解决下,

论坛徽章:
0
发表于 2004-12-03 00:03 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

-k, --key=pos1[,pos2]|.reclen|.position.length]]
              Restrict the sort key to a string beginning at pos1
              and  ending  at  pos2.  pos1 and pos2 each have the
              form m.n, counting from 1, optionally  followed  by
              one  or  more  of  the  flags CMbdfginprZ; m counts
              fields from the beginning of the line and n  counts
              characters  from the beginning of the field. If any
              flags are present  they  override  all  the  global
              ordering  options  for  this  key. If .n is missing
              from pos1, it is taken to be  1;  if  missing  from
              pos2,  it  is  taken to be the end of the field. If
              pos2 is missing, it is taken to be end of line. The
              second form specifies a fixed record length reclen,
              and the last form specifies a fixed field  at  byte
              position  position  (counting  from  1)  of  length
              bytes.                                          

  +pos1  -pos2  is  the  classical  alternative  to -k, with
       counting  from  0  instead  of  1,  and  pos2  designating
       next-after-last  instead  of  last character of the key. A
       missing character count in pos2 means  0,  which  in  turn
       excludes  any  -t  tab  character from the end of the key.
       Thus +1 -1.3 is the same as -k 2,2.3 and  +1r  -3  is  the
       same as -k 2r,3.

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
发表于 2004-12-03 09:06 |显示全部楼层

基础11:文件分类、合并和分割(sort,uniq,join,cut,paste,split)

Thus +1 -1.3 is the same as -k 2,2.3
and +1r -3 is the same as -k 2r,3

+pos1 -pos2是配合使用的啊,后面这行怎么 理解耶
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP