2013-10-18 18:04:58 u012492282 阅读数 2537
  • 大数据视频_Shell视频教程

    Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell可以帮助我们来管理大数据集群,提高开发效率。本课程详细讲解:Shell解析器、变量、运算符、条件判断、流程控制、函数、cut、sed、awk、sort和企业真题(京东、搜狐、新浪等)。课程中全程以案例贯穿,深入浅出 。

    2796 人正在学习 去看看 缪传海

    微博发了4000多了,blog这是第一篇。]

     sort用法

    sort是一个基本的linux命令,用于排序,常用的选项有-n, -t, -k:

(1)基本用法

       命令行直接输入: sort filename.txt,将会输出排序后的结果

       但是原文件并没有发生改变。如果需要,可以重定向到新文件  sort filename.txt > newname.txt

       PS:新文件的名字要和原文件不同,否则会清空原文件,此时可以使用 -o选项:

       sort filename.txt -o filename.txt

(2)-n的用法:

       不加任何选项的sort默认是按照英文升序排列的,当遇到数字时,需要加-n(此方法对小数也适用)

       sort -n filename.txt > newname.txt

       如果需要降序,使用-r选项

(3)-t和-k的用法

        这两个选项一般会一起出现,t表示分隔符,k表示位置,举个例子:

        log文件中的行格式为:1379382264.078/p27cbf8c,第一位表示时间戳,第三位表示id

        如果要求以id升序排列,用sort -d -t ' ' -k 3 log > newlog

        -d 表示排序依据为数字和字母,可以理解为对16进制排序,

        -t 用来切分行,-k 3 表示依照切分后的第三个位置的key来排序

        PS:排序难免会遇到要比较的key相同的情况,此时可以指定排序依据,否则按照默认进行

        比如上例中,若id相同,则按时间戳排序的命令为:

         sort -d -t ' ' -k 3 -k 1 log > newlog,即再push一个key进命令中

(4)其余的用法:

        -u:这个选项就是去重的

       -c:sort前检测是否已经排序,是则不再sort,此时无结果输出

       -m:用于合并已经排过序的文件,此时相当于只有合并功能,不再排序

更多用法sort --help

2017-08-24 16:04:40 idKevin 阅读数 657
  • 大数据视频_Shell视频教程

    Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell可以帮助我们来管理大数据集群,提高开发效率。本课程详细讲解:Shell解析器、变量、运算符、条件判断、流程控制、函数、cut、sed、awk、sort和企业真题(京东、搜狐、新浪等)。课程中全程以案例贯穿,深入浅出 。

    2796 人正在学习 去看看 缪传海

中文编码不同对 Linux 中的 sort 命令的影响

linux中sort命令是非常常用的命令,平时一般用英文或数字key来排序,今天遇到了中文汉字作为key,排序输出的结果和自己预期的结果不一样,折腾半天,发现是与文件的编码有关(通过Lang这个语系变量设置可以得到正常的排序),下面贴出代码供遇到同样问题的人参考。

root@linux:~$ vim input

今天 今天
你好 你好
今天 今天


root@linux:~$ LANG=en_US.UTF-8; sort -t' ' -k1,2 input > output
root@linux:~$ vim output

今天 今天
你好 你好
今天 今天


root@linux:~$ LANG=GBK; sort -t' ' -k1,2 input > output
root@linux:~$ vim output

今天 今天
今天 今天
你好 你好

2017-12-09 11:34:28 zhuqiuhui 阅读数 217
  • 大数据视频_Shell视频教程

    Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell可以帮助我们来管理大数据集群,提高开发效率。本课程详细讲解:Shell解析器、变量、运算符、条件判断、流程控制、函数、cut、sed、awk、sort和企业真题(京东、搜狐、新浪等)。课程中全程以案例贯穿,深入浅出 。

    2796 人正在学习 去看看 缪传海

sort命令

sort [-bcfMnrtk][源文件][-o 输出文件]

参数:

-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-f 排序时,忽略大小写字母。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
-k 选择以哪个区间进行排序

示例:

test.txt

banana
apple
pear
orange
$ sort test.txt #默认以字符顺序,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
$ sort -u test.txt #去重复
$ sort -r test.txt #默认升序,改为降序
$ sort -r test.txt -o test.txt # 把test.txt内容降序,并覆盖原文件
$ sort -n test.txt # test.txt中以数值来排序,而非字符顺序
$ cat text.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4

$ sort -n -k 2 -t ':' test.txt # -n:数值顺序 -k:第2个区间 -t:以':'划分数据行
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3
2011-03-14 18:01:59 toty01 阅读数 0
  • 大数据视频_Shell视频教程

    Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell可以帮助我们来管理大数据集群,提高开发效率。本课程详细讲解:Shell解析器、变量、运算符、条件判断、流程控制、函数、cut、sed、awk、sort和企业真题(京东、搜狐、新浪等)。课程中全程以案例贯穿,深入浅出 。

    2796 人正在学习 去看看 缪传海

sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始!

  1 sort的工作原理

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

  [rocrocket@rocrocket programming]$ cat seq.txt

  banana

  apple

  pear

  orange

  [rocrocket@rocrocket programming]$ sort seq.txt

  apple

  banana

  orange

  pear

  2 sort的-u选项

  它的作用很简单,就是在输出行中去除重复行。

  [rocrocket@rocrocket programming]$ cat seq.txt

  banana

  apple

  pear

  orange

  pear

  [rocrocket@rocrocket programming]$ sort seq.txt

  apple

  banana

  orange

  pear

  pear

  [rocrocket@rocrocket programming]$ sort -u seq.txt

  apple

  banana

  orange

  pear

  pear由于重复被-u选项无情的删除了。

  3 sort的-r选项

  sort默认的排序方式是升序,如果想改成降序,就加个-r就搞定了。

  [rocrocket@rocrocket programming]$ cat number.txt

  1

  3

  5

  2

  4

  [rocrocket@rocrocket programming]$ sort number.txt

  1

  2

  3

  4

  5

  [rocrocket@rocrocket programming]$ sort -r number.txt

  5

  4

  3

  2

  1

  4 sort的-o选项

  由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。

  但是,如果你想把排序结果输出到原文件中,用重定向可就不行了。

  [rocrocket@rocrocket programming]$ sort -r number.txt > number.txt

  [rocrocket@rocrocket programming]$ cat number.txt

  [rocrocket@rocrocket programming]$

  看,竟然将number清空了。

  就在这个时候,-o选项出现了,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。

  [rocrocket@rocrocket programming]$ cat number.txt

  1

  3

  5

  2

  4

  [rocrocket@rocrocket programming]$ sort -r number.txt -o number.txt

  [rocrocket@rocrocket programming]$ cat number.txt

  5

  4

  3

  2

  1

  5 sort的-n选项

  你有没有遇到过10比2小的情况。我反正遇到过。出现这种情况是由于排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面喽。这也是sort的一贯作风。

  我们如果想改变这种现状,就要使用-n选项,来告诉sort,“要以数值来排序”!

  [rocrocket@rocrocket programming]$ cat number.txt

  1

  10

  19

  11

  2

  5

  [rocrocket@rocrocket programming]$ sort number.txt

  1

  10

  11

  19

  2

  5

  [rocrocket@rocrocket programming]$ sort -n number.txt

  1

  2

  5

  10

  11

  19

  6 sort的-t选项和-k选项

  如果有一个文件的内容是这样:

  [rocrocket@rocrocket programming]$ cat facebook.txt

  banana:30:5.5

  apple:10:2.5

  pear:90:2.3

  orange:20:3.4

  这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。

  那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?

  幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)

  指定了间隔符之后,就可以用-k来指定列数了。

  [rocrocket@rocrocket programming]$ sort -n -k 2 -t : facebook.txt

  apple:10:2.5

  orange:20:3.4

  banana:30:5.5

  pear:90:2.3

  我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。

  7 其他的sort常用选项

  -f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

  -c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

  -C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

  -M会以月份来排序,比如JAN小于FEB等等

  -b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

2019-06-17 18:52:42 wade3015 阅读数 1101
  • 大数据视频_Shell视频教程

    Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强。Shell可以帮助我们来管理大数据集群,提高开发效率。本课程详细讲解:Shell解析器、变量、运算符、条件判断、流程控制、函数、cut、sed、awk、sort和企业真题(京东、搜狐、新浪等)。课程中全程以案例贯穿,深入浅出 。

    2796 人正在学习 去看看 缪传海

sort:可以实现依据不同的数据类型进行排序,其语法及常用参数格式如下:

sort [-bcfMnrtk][源文件][-o 输出文件]
       补充说明:sort可针对文本文件的内容,以行为单位来排序。       
   参  数:
     -b   忽略每行前面开始出的空格字符。
     -c   检查文件是否已经按照顺序排序。
     -f   排序时,忽略大小写字母。
     -M   将前面3个字母依照月份的缩写进行排序。
     -n   依照数值的大小排序。
     -o<输出文件>   将排序后的结果存入指定的文件。
     -r   以相反的顺序来排序。
     -t<分隔字符>   指定排序时所用的栏位分隔字符。
     -k  选择以哪个区间进行排序。

1 sort的工作原理

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

[root@gitlab ~]$ cat seq.txt
banana
apple
pear
orange
pear
[root@gitlab ~]$ sort seq.txt 
apple
banana
orange
pear
pear

2 sort的-u选项

它的作用很简单,就是在输出行中去除重复行。

[root@gitlab ~]$ sort -u seq.txt 
apple
banana
orange
pear

pear由于重复被-u选项无情的删除了。

3 sort的-r选项

[root@gitlab ~]$ cat number.txt
1
3
5
7
11
2
4
6
10
8
9
[root@gitlab ~]$ sort number.txt  --sort默认的排序方式是升序
1
10
11
2
3
4
5
6
7
8
9
[root@gitlab ~]$ sort -n number.txt      --排序程序将这些数字按字符来排序了,排序程序会先比较1和2,显然1小,所以就将10放在2前面
1
2
3
4
5
6
7
8
9
10
11
[root@gitlab ~]$ sort -n -r number.txt      --r表示降序,n表示按数字进行排序
11
10
9
8
7
6
5
4
3
2
1

4 sort的-o选项

由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。

但是,如果你想把排序结果输出到原文件中,用重定向就需要使用追加的方式。

[root@gitlab ~]$ sort -n -r number.txt > number.txt
[root@gitlab ~]$ cat number.txt 
[root@gitlab ~]$ 

number清空了。所以我们需要使用-o选项,它成功的解决了这个问题,让你放心的将结果写入原文件。这或许也是-o比重定向的唯一优势所在。

[root@gitlab ~]$ sort -n -r number.txt -o number.txt
[root@gitlab ~]$ cat number.txt 
11
10
9
8
7
6
5
4
3
2
1

5 sort的-t选项和-k选项

[root@gitlab ~]$ cat facebook.txt
banana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
[root@gitlab ~]$ sort -n -k 2 -t : facebook.txt
apple:10:2.5
orange:20:3.4
banana:30:5.5
pear:90:2.3

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)

指定了间隔符之后,就可以用-k来指定列数了。我们使用冒号作为间隔符,并针对第二列来进行数值升序排序,结果很令人满意。

6 其他的sort常用选项

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

linux命令-sort

阅读数 21

Linux-sort排序

阅读数 10519

Linux中sort命令

阅读数 4357

Linux sort命令

阅读数 26

没有更多推荐了,返回首页