Chinaunix首页 | 论坛 | 博客
  • 博客访问: 87310
  • 博文数量: 25
  • 博客积分: 2011
  • 博客等级: 大尉
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 14:35
文章分类

全部博文(25)

文章存档

2011年(1)

2009年(8)

2008年(16)

我的朋友

分类:

2008-11-25 09:15:11

sort

cat students
John Johnsen    john.johnsen@tp.com     503.555.1111
Hassaan Sarwar  hsarwar@k12.st.or       503.444.2132
David Kendall   d_kendall@msnbc.org     229.111.2013

sort students
David Kendall   d_kendall@msnbc.org     229.111.2013
Hassaan Sarwar  hsarwar@k12.st.or       503.444.2132
John Johnsen    john.johnsen@tp.com     503.555.1111

sort +1 students
根据第2字段 (字段号1) 开始的整行作为排序关键字
John Johnsen    john.johnsen@tp.com     503.555.1111
David Kendall   d_kendall@msnbc.org     229.111.2013
Hassaan Sarwar  hsarwar@k12.st.or       503.444.2132

sort +3 -r -b students
以电话号码为关键字,对文件进行反向排序 (-b用于忽略字段之间的空格)
John Johnsen    john.johnsen@tp.com     503.555.1111
Hassaan Sarwar  hsarwar@k12.st.or       503.444.2132
David Kendall   d_kendall@msnbc.org     229.111.2013

sort +1 -2 +3 -b students
将姓氏为主关键字,将电话号码作为次关键字
John Johnsen    john.johnsen@tp.com     503.555.1111
David Kendall   d_kendall@msnbc.org     229.111.2013
Hassaan Sarwar  hsarwar@k12.st.or       503.444.2132

sort -k start,end files (关键字开始列,关键字结束列)
sort -rn -k 2,2 students

John Johnsen    john.johnsen@tp.com     503.555.1111
Hassaan Sarwar  hsarwar@k12.st.or       503.444.2132
David Kendall   d_kendall@msnbc.org     229.111.2013

sort -t: -k3,3 -k4,4 -k6,6 -k7n,7

-k3,3 就是只征对第3列排序,不排序后面的列
相当于 sort -t: +2 -3 +3 -4 +5 -6 +6n -7
-k7n 是对第7列按数字排序

现有一组数据文件进行排序,准备使用sort命令完成。但是测试并不成功,不知为何。请大家指点:
1。数据字段不是固定长度。
2。数据字段位置可辨,行首及行中、行尾三种情况
例如:
11,222,33
2,12,90
23,235,3
11111111,0,10
33,222222,22
0,90,222222222

求助:请问按行首排序得sort命令如何?行中、行尾呢?

sort -n -t, +0 -1 +1 -2 +2 -3 filename

看虚存:
#ps av |sort +5 -r |head -n 5
看实存:
#ps av |sort +6 -r |head -n 5
看内存%:
# ps au |head -n 1; ps au |egrep -v "RSS"|sort +3 -r |head -n 5


du | sort -n

sort按照指定的分割符把输入分割。按照指定列对文件排序
sort [-t 分割符] [-r逆序] [+n指定用来排序的列] file
$sort -t: passwd
以:分割行。然后按照分类键0排序
$sort -t: -r passwd
排序求逆
$sort -t: +1 passwd
按照第二列的值进行排序
$sort -t: +2n passwd
按照第三列按数值大小排序
$sort -t: +0 -2 +3 passwd
按照域0排序,忽略域2,然后使用域3排序
sort -t: -k3,3 -k4,4 -k6,6 -k7n,7

-k3,3 就是只征对第3列排序,不排序后面的列
相当于 sort -t: +2 -3 +3 -4 +5 -6 +6n -7
-k7n 是对第7列按数字排序


现有一组数据文件进行排序,准备使用sort命令完成。但是测试并不成功,不知为何。请大家指点:
1。数据字段不是固定长度。
2。数据字段位置可辨,行首及行中、行尾三种情况
例如:
11,222,33
2,12,90
23,235,3
11111111,0,10
33,222222,22
0,90,222222222

求助:请问按行首排序得sort命令如何?行中、行尾呢?

sort -n -t, +0 -1 +1 -2 +2 -3 filename

看CPU:
# ps auxwww |head -n 5
看虚存:
#ps av |sort +5 -r |head -n 5
看实存:
#ps av |sort +6 -r |head -n 5
看内存%:
# ps au |head -n 1; ps au |egrep -v "RSS"|sort +3 -r |head -n 5


du | sort -n

sort按照指定的分割符把输入分割。按照指定列对文件排序
sort [-t 分割符] [-r逆序] [+n指定用来排序的列] file
$sort -t: passwd
以:分割行。然后按照分类键0排序
$sort -t: -r passwd
排序求逆
$sort -t: +1 passwd
按照第二列的值进行排序
$sort -t: +2n passwd
按照第三列按数值大小排序
$sort -t: +0 -2 +3 passwd
按照域0排序,忽略域2,然后使用域3排序

cut截取子字串
1、cut -c char-list file
echo 2003060160910.dat | cut -c1-9
200306018
取出1-9个字符

2、cut -d 分隔符 -f field-list file
cut -d: -f1 passwd
alias
qmaild
qmaill
qmailp
qmailq
qmailr
qmails
vpopmail
按照:分隔,取出第一个字段

tr主要用于文字替换和压缩重复的字符
。大小写转换
echo abcdefg | tr "a-z" "A-Z"
ABCDEFG

。压缩空格
echo "ab cd ef g" | tr -s " "
ab cd ef g

。压缩空行
cat file | tr -s "\n"


语法格式sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ]
[ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ]
[ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ]
[ i ] [ n ] [ r ] ] ] [ -k KeyDefinition ] [文档 ]
使用说明sort 命令对 File 参数指定的文档中的行排序,并将结果写到标准输出。假如 File 参数指定多个文档,
那么 sort 命令将这些文档连接起来,并当作一个文档进行排序。-(减号)代替文档名指定标准输入。
假如您不指定任何文档名,那么该命令对标准输入排序。能够使用 -o 标志指定输出文档。
假如不指定任何标志,sort 命令基于当前语言环境的整理顺序对输入文档的任何行排序。
主要参数-A 使用 ASCII 整理顺序代替当前语言环境的整理顺序在逐字节的基础上排序。
-b 忽略前导空格和制表符,找出字段的第一或最后列。
-c 检查输入是否已按照标志中指定的排序规则进行排序。假如输入文档排序不正确,就返回一个非零值。
-d 使用字典顺序排序。比较中仅考虑字母、数字和空格。
-f 比较前将任何小写字母改成大写字母。
-i 比较中忽略任何非显示字符。
-k KeyDefinition 指定排序关键字。KeyDefinition 选项的格式为:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
排序关键字包括任何以 FStart 变量指定的字段和 CStart 变量指定的列开头的字符及以 FEnd 变量指定的字段和
CEnd 变量指定的列结束的字符。Modifier 变量的值能够是 b、d、f、i、n 或 r。修饰符和同一字母的标志等价。
-m 只合并多个输入文档;假设输入文档已排序。
-n 按算术值对数字字段排序。数字字段可包含前导空格、可选减号、十进制数字、千分位分隔符和可选基数符。
对包含任何非数字字符的字段进行数字排序会出现无法预知的结果。
-o OutFile 将输出指向 OutFile 参数指定的文档,而不是标准输出。OutFile 参数值能够和 File 参数值相同。
-r 颠倒指定排序的顺序。
-t Character 指定 Character 为单一的字段分隔符。
-u 禁止按照排序关键字和选项的任何等同排序(每一组行中一行除外)。
-T Directory 将创建的任何临时文档放入 Directory 参数指定的目录中。
-y[Kilobytes] 用 Kilobytes 参数指定的主存储的千字节数启动 sort 命令,并根据需要增加存储量。
(假如  Kilobytes 参数指定的值小于最小存储站点或大于最大存储站点,就以这个最小存储站点或最大存储站点取代)。
假如省略 -y 标志,sort 命令以缺省的存储大小启动。
-y0 标志用最小存储启动,而 -y 标志(不带 Kilobytes 值)用最大存储启动。sort 命令使用的存储量显著地影响性能。
以大存储量对小文档排序将很浪费。
-z RecordSize 假如正在排序的任一行大于缺省的缓冲区大小,要防止出现异常终止。
指定 -c 或 -m 标志时,省略排序阶段,使用系统的缺省缓冲大小。假如已排序行超出这一大小,排序异常终止。
-z 选项指定排序阶段最长行的记录,因而可在合并阶段分配足够的缓冲区。
RecordSize 必须指明等于或大于要合并的最长行的字节值。
应用实例

  • 要在 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 En_US 的情况下排序 fruits 文档,请输入:

LANG=En_US sort fruits
此命令序列显示以升序词典顺序排序的 fruits 文档的内容。每一列的字符,包括空格、数字和特别字符都经一一比较。
例如,假如 fruits 文档包含文本:
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
sort 命令显示:
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
在 ASCII 整理序列中,%(百分号)在大写字母前,大写字母在小写字母前。
假如您当前的语言环境指定 ASCII 之外的字符集,结果可能不同。

  • 要以字典顺序排序,请输入:

sort  -d fruits
此命令序列排序和显示 fruits 文档的内容,并且只比较字母、数字和空格。
假如 fruits 文档和示例 1 相同,那么 sort 命令显示:
ORANGE
Persimmon
apple
apple
%%banana
banana
orange
-d 标志忽略 %(百分号)字符,因为他不是个字母、数字或空格。(即 %%banana 被 banana 取代)。

  • 要将包含大写字母和具备类似小写行的特别字符行分组,请输入:

sort -d -f fruits
-d 标志忽略特别字符,-f 标志忽略大小写差异。
将 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 C 的情况下,fruits 文档的输出结果变为:
apple
apple
%%banana
banana
ORANGE
orange
Persimmon

  • 要除去重复行排序,请输入:

sort  -d  -f  -u fruits
-u 标志告诉 sort 命令除去重复的行,使文档中的每一行唯一。此命令序列显示:
apple
%%banana
ORANGE
Persimmon
不但除去重复的 apple,而且也除去了 banana 和 ORANGE。
除去这些是因为 -d 标志忽略 %% 这个特别字符,-f 标志忽略大小写差异。

  • 要如上面那样排序,除去重复的实例(除非是大写字母或标点不同),请输入:

sort  -u +0  -d -f +0 fruits
输入 +0 -d -f 完成的排序和示例 3 中 -d -f 的排序类型相同,+0 进行另一项比较以区分不相同的行。
这防止 -u 标志将他们除去。
示例 1 所示的 fruits 文档中,添加的 +0 将 %%banana 和 banana 及 ORANGE 和 orange 区分开来。
然而,apple 的两个实例是相同的,所以其中之一被删除。
apple
%%banana
banana
ORANGE
orange
Persimmon

  • 要指定分隔字段的字符,请输入:

sort  -t: +1 vegetables
此命令序列排序 vegetables 文档,对每一行上第一个冒号后的文本进行比较。
+1 告诉 sort 命令忽略第一字段,从第二字段的开始到该行的结束进行比较。-t: 标志告诉 sort 命令冒号分隔字段。
假如 vegetables 包含:
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
radishes:5
lettuce:15
那么,将 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 C 的情况下,sort 命令将显示:
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
注意数字没有按照数字排序。当用字典式分类从左至右比较每一个字符时出现这种情况。
换句话说,3 在 5 之前,所以 32 在 5 之前。

  • 要排序数字,请输入:

sort  -t: +1  -n vegetables
此命令序列按照第二个字段对 vegetables 文档进行数字排序。
假如 vegetables 文档和示例 6 中的相同,那么  sort 命令将显示:
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
yams:104

  • 要对多个字段排序,请输入:

sort  -t: +1 -2  -n +0 -1  -r vegetables

sort  -t:  -k2,2 n -k1,1 r vegetables
此命令序列对第二字段(+1 -2 -n)进行数字排序。在这个顺序中,他以逆字母顺序(+0 -1 -r)对第一字段排序。
将 LC_ALL、LC_COLLATE 或 LANG 环境变量配置为 C 的情况下,输出将类似于:
radishes:5
turnips:8
potatoes:15
lettuce:15
green beans:32
yams:104
carrots:104
此命令按数字顺序对行排序。当两行数字相同时,他们以逆字母顺序出现。

  • 要使用排序的文本替换原始文档,请输入:

sort  -o vegetables vegetables
此命令序列将排序输出存入 vegetables 文档( -o vegetables)。


linux sort 命令详解
       sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
  Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。
  语法:
  sort [选项] 文件
  说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用"- ",则表示排序内容来自标准输入。

  sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。

  改变缺省设置的选项主要有:

  - m 若给定文件已排好序,合并文件。

  - c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。

  - u 对排序后认为相同的行只留其中一行。

  - o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。

  改变缺省排序规则的选项主要有:

  - d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。

  - f 将小写字母与大写字母同等对待。

  - I 忽略非打印字符。

  - M 作为月份比较:"JAN"  
  - r 按逆序输出排序结果。

  +posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。

  - b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。

  - t separator 指定字符separator作为字段分隔符。

  下面通过几个例子来讲述sort的使用。

  用sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。

  $ cat text

  vegetable soup

  fresh vegetables

  fresh fruit

  lowfat milk

  $ sort text

  fresh fruit
 
  fresh vegetables

  lowfat milk

  vegetable soup

  用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。

  $ sort text>result

  以第2个字段作为排序关键字对文件example的内容进行排序。

  $ sort +1-2 example

  对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。

  $ sort -r -o outfile +1.0 -1.1 example

  sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给sort进行排序,排序关键字是第6个至第8个字段。

  $ ls - l | sort +5 - 7

  sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合并, 然后用管道操作把合并后的文本行输入给命令sort,sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件 fruitlist的文本行经过合并与排序后被保存到文件clist中。

  $ cat veglist fruitlist | sort > clist
阅读(3873) | 评论(0) | 转发(0) |
0

上一篇:AWK介绍

下一篇:python os模块

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