免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1120 | 回复: 0
打印 上一主题 下一主题

[分享]sort命令 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-09 13:34 |只看该作者 |倒序浏览

  1. sort命令排列文本行,并把文件打印输出到屏幕上。
  2. sort命令提供了一种以字母或者数字顺序快速组织数据的方法。默认方式下,sort命令使用white space来分割文件中的不同域。
  3. 排序文件、对已排序的文件进行合并,并检查文件以确定它们是否已排序。




  4.         sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。-(减号)代替文件名指定标准输入。如果您不指定任何文件名,那么该命令对标准输入排序。可以使用 -o 标志指定输出文件。
  5.         如果不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文件的所有行排序。
  6.         使用排序关键字时,sort 命令首先根据第一个排序关键字的内容对所有行排序。然后,根据第二个排序关键字的内容,对所有第一个排序关键字相同的行排序,如此进行下去。按照排序关键字在命令行中出现的顺序给它们编号。如果两行对所有排序关键字的排序都相同,则对全部行依据当前语言环境的整理顺序进行比较。

  7. 主要参数

  8. -A 使用 ASCII 整理顺序代替当前语言环境的整理顺序在逐字节的基础上排序。
  9. -b 忽略前导空格和制表符,找出字段的第一或最后列。
  10. -c 检查输入是否已按照标志中指定的排序规则进行排序。如果输入文件排序不正确,就返回一个非零值。
  11. -d 使用字典顺序排序。比较中仅考虑字母、数字和空格。
  12. -f 比较前将所有小写字母改成大写字母。
  13. -i 比较中忽略所有非显示字符。
  14. -k KeyDefinition 指定排序关键字。KeyDefinition 选项的格式为:
  15. [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
  16. 排序关键字包括所有以 FStart 变量指定的字段和 CStart 变量指定的列开头的字符及以 FEnd 变量指定的字段和
  17. CEnd 变量指定的列结束的字符。Modifier 变量的值可以是 b、d、f、i、n 或 r。修饰符与同一字母的标志等价。

  18. -m 只合并多个输入文件;假设输入文件已经排序。
  19. -n 按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。
  20. 对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。
  21. -o OutFile 将输出指向 OutFile 参数指定的文件,而不是标准输出。OutFile 参数值可以与 File 参数值相同。
  22. -r 颠倒指定排序的顺序。
  23. -t Character 指定 Character 为单一的字段分隔符。
  24. -u 禁止按照排序关键字和选项的所有等同排序(每一组行中一行除外)。
  25. -T Directory 将创建的所有临时文件放入 Directory 参数指定的目录中。
  26. -y[Kilobytes] 用 Kilobytes 参数指定的主存储的千字节数启动 sort 命令,并根据需要增加存储量。
  27. (如果  Kilobytes 参数指定的值小于最小存储站点或大于最大存储站点,就以这个最小存储站点或最大存储站点取代)。
  28. 如果省略 -y 标志,sort 命令以缺省的存储大小启动。
  29. -y0 标志用最小存储启动,而 -y 标志(不带 Kilobytes 值)用最大存储启动。sort 命令使用的存储量显著地影响性能。
  30. 以大存储量对小文件排序将很浪费。
  31. -z RecordSize 如果正在排序的任一行大于缺省的缓冲区大小,要防止出现异常终止。
  32. 指定 -c 或 -m 标志时,省略排序阶段,使用系统的缺省缓冲大小。如果已排序行超出这一大小,排序异常终止。
  33. -z 选项指定排序阶段最长行的记录,因而可在合并阶段分配足够的缓冲区。
  34. RecordSize 必须指明等于或大于要合并的最长行的字节值。

  35. [举例]
  36. (网上说的,设在 LC_ALL、LC_COLLATE 或 LANG 环境变量设置为 En_US 的情况下排序,我看我的机器上面只有LANG=zh_CN.UTF-8,实践之后发现,有的排序混乱了,设置为LANG=En_US就行了)
  37. 假设文件forsort1如下:
  38. $ cat forsort1
  39. yams:104
  40. turnips:8
  41. potatoes:15
  42. carrots:104
  43. green beans:32
  44. carrots:104
  45. radishes:5
  46. lettuce:15


  47. *对文件内容按行排序,结果输出到标准输出:
  48. $sort forsort1
  49. 输入之后,输出如下:
  50. carrots:104
  51. carrots:104
  52. green beans:32
  53. lettuce:15
  54. potatoes:15
  55. radishes:5
  56. turnips:8
  57. yams:104
  58. 这里,forsort的内容将会按行由小到大重新排列,如果有多个关键字(默认空白分割),开始几个关键字相同的行,将继续按照次关键字进行排序。

  59. *逆序对文件内容进行排序,结果输出到标准输出:
  60. $sort -r forsort1
  61. 输入之后,输出如下:
  62. yams:104
  63. turnips:8
  64. radishes:5
  65. potatoes:15
  66. lettuce:15
  67. green beans:32
  68. carrots:104
  69. carrots:104
  70. 这里,可以看出,结果和sort forsort1相反。

  71. *对文件内容排序,结果输出到out.txt文件中:
  72. $sort forsort1 -o out.txt
  73. 这里.使用-o选项指定输出文件,结果和sort forsort1唯一不同的是结果没有输出到标准输出而是输出到了out.txt文件中。

  74. *排序,相同的行只保留一行:
  75. $sort -u forsort1
  76. 输入之后,输出如下:
  77. carrots:104
  78. green beans:32
  79. lettuce:15
  80. potatoes:15
  81. radishes:5
  82. turnips:8
  83. yams:104
  84. 这里,将两个carrots行删去了一个。


  85. *指定分隔字段的字符为':',然后按第2个关键字进行排序:
  86. $sort -t: -k 2 forsort1
  87. 输入之后,输出如下:
  88. carrots:104
  89. carrots:104
  90. yams:104
  91. lettuce:15
  92. potatoes:15
  93. green beans:32
  94. radishes:5
  95. turnips:8
  96. 这里,-t指定分割符号,-k指定位置(默认1),-t和-k后面的空格可有可无;如果位置是从第2个到第4个,那么这样:sort -k2,4 forsort1

  97. *先根据第3字段排序,相等再根据第4列排序/etc/passwd:
  98. sort -t: -k3 -k4 -n /etc/passwd
  99. 这里,因为需要比较多列,所以就再加上-k。

  100. *对第2个字段按照数字的值进行排序:
  101. $sort -t: -k2 -n forsort1
  102. 输入之后,输出如下:
  103. radishes:5
  104. turnips:8
  105. lettuce:15
  106. potatoes:15
  107. green beans:32
  108. carrots:104
  109. carrots:104
  110. yams:104
  111. 这里,-n按照数字方式排序,不加-n参数时排序结果根据最左面的数字开始,等同于字母的比较方式。
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP