“排序”在任何一门语言中都是最基础的功能,常见的排序对象有“文件”和“数组”,排序模式可以按照单列排序,也可以多列组合排序,排序方式有升序、降序,排序的算法就更多了,常见的有字典顺序、数组大小比较等。下文将从“排序对象”、“排序模式”、“排序方式”、“排序的算法”5个方面,逐一来分析shell是如何实现的。

一.使用sort分别对文件和数组进行排序

1.使用sort [文件名]就可以对文件以行为单位进行排序
注意:sort排序后并不会改变原文件,而是将排序结果输出到了“标准输出”,你可以使用sort -o [输出文件名] [文件名]sort [文件名] > [输出文件名]将排序结果存到指定文件

$cat test
aa
cc
bb$sort test
aa
bb
cc

注意:sort排序后并不会改变原文件,而是将排序结果输出到了“标准输出”,你可以使用sort -o [输出文件名] [文件名]sort [文件名] > [输出文件名]将排序结果存到指定文件

2.使用sort命令对数组进行排序要稍微麻烦一点,因为sort命令默认的排序对象是文本文件,并且是以行为单位进行排序,所以在排序之前,需要先将数组转化为以行为单位的输入流,然后通过管道命令传递到sort

sort_arr.sh#!/bin/sh
arr=(aa cc bb)
echo ${arr[@]} | tr ' ' '\n' | sort -o sort_result
cat sort_result
$./sort_arr.sh
aa
bb
cc

二.指定列排序

1.列分隔符

  指定列排序的前提是将每一行分为多列,sort默认的列分隔符为空格,如果需要自定义列分割符,需要使用sort -t '列分隔符'

(1)默认分隔符
$cat test_multi_column_empty
1 b
3 a
2 c# 根据第二列排序
$sort -k 2 test_multi_column_empty
3 a
1 b
2 c
(2)自定义分隔符
$cat test_multi_column_comma
1,b
3,a
2,c# 根据第二列排序
$sort -t ',' -k 2 test_multi_column_empty
3,a
1,b
2,c

2.指定列排序

  sort默认是按照第一列进行排序,如果需要指定列排序,需要使用sort -k 列1[修饰符] -k 列2[修饰符]

1.根据第2列升序,第3列降序
$cat test_goods
g1,400,2000
g3,300,1000
g2,200,3000
g4,200,5000
g5,200,1000$sort -t ',' -k2,2 -k3r test_goods
g4,200,5000
g2,200,3000
g5,200,1000
g3,300,1000
g1,400,2000

-k参数详细的语法如下:
列1.字符1[修饰符],列2.字符2[修饰符]

三.升序与降序

sort默认是按升序排序,如果需要降序排序,可以使用sort -r

$sort -r test
cc
bb
aa

四.按数值大小排序 & 按字符排序

   sort默认使用字符串排序。字符串排序算法为:从首字符向后,依次按 ASCII 码值进行比较,最后将它们按升序输出。同时,提供了下面几个选项来修改排序算法。

  • -n:以数值型进行排序
  • -f:将小写字母视为大写字母

shell排序,强大的sort与awk相关推荐

  1. shell 删除文本中的重复行(sort+uniq/awk/sed) (方法=效率啊)

    From: http://churuimin425.blog.163.com/blog/static/341298772012230112956712/ 删除文本中的重复行(sort+uniq/awk ...

  2. shell正则表达式及一些排序命令(sort、uniq、tr)

    shell正则表达式及一些排序命令 文章目录 shell正则表达式及一些排序命令 一.sort命令 语法格式: 常用选项: 二.uniq命令 语法格式: 常用选项: 三.tr命令 语法格式: 常用选项 ...

  3. Linux Shell重定向 管道命令 grep搜索 awk编程 sed文件操作高阶函数

    在编程中如果能够熟悉shell高阶语法,将对我们进阶为高级程序员有很大的帮助,本文将从Shell重定向 管道命令 awk编程 sed等方面展开介绍. 作者:有勇气的牛排 文章目录 1 shell重定向 ...

  4. linux的sort如何对时间排序,Linux中用Sort和Tsort对文件进行排序

    通过使用 sort 和 tsort,而不是采取使用 Perl 或 Awk 的较复杂的解决方案,可以节省时间,同时还能避免令人头疼的问题.Jacek Artymiak 将向您说明如何做到这一点. 尽管可 ...

  5. linux sed去除重复,删除文本中的重复行(sort+uniq/awk/sed)

    在进行文本处理的时候,我们经常遇到要删除重复行的情况.那怎么解决呢? 下面就是三种常见方法? 第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort file | un ...

  6. shell脚本——grep cut sort uniq tee diff paster tr等小工具的使用方法

    shell脚本的一些小工具的使用方法 grep 语法和选项 实例 cut 语法和选项 实例 sort 语法和选项 实例 uniq 语法和选项 实例 tee 语法和选项 实例 diff 语法和选项 实例 ...

  7. 排序算法系列:Shell 排序算法

    概述 希尔排序(Shell Sort)是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2n^{2}n2) 的,希尔排序算法是突破这个时间复杂度 ...

  8. shell编程之文本处理工具awk

    shell编程之文本处理工具awk 文章目录 shell编程之文本处理工具awk 一.awk介绍 1. awk概述 2. awk能干啥? 二.awk使用方式 1. ==命令行模式使用== ㈠ 语法结构 ...

  9. 算法之排序算法-shell排序(移位法)

    个人觉得移位法就是借希尔排序进行分组,插入排序进行排序 注释是上一篇的交换法. 而且这种移位排序的真的很快 package com.ebiz.sort;import java.text.SimpleD ...

最新文章

  1. 跨境电商三单对碰三单申报流程详解
  2. 一次布环境,引起的总结
  3. MongoDB数据库的创建与删除
  4. dependencyManagement与dependencies区别
  5. [转]Fiddler模拟post四种请求数据
  6. css3 背景等比例,纯 CSS,不用背景,实现图片等比例展示
  7. jQuery图片懒加载示例(滚动函数再加载)
  8. 联想在华为背后“捅刀”?谁在让 5G 标准投票成闹剧
  9. “滚蛋吧”扎克伯格!
  10. 姓名的首字母组成的图案C语言怎么编,c语言编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母:...
  11. python求绝对值_python绝对值怎么计算
  12. 电脑怎么安装xp系统原版镜像
  13. easyui datagrid mysql分页_Easyui 自定义分页_EasyUI 教程
  14. 厨神之路三--自制饮品
  15. Combined Margin loss人脸识别训练笔记
  16. 解决Visio用直线手画的形状不能填充问题
  17. 2021安徽考研计算机分数如何,2021年安徽省考研成绩公布时间
  18. 包装类型与引用类型的使用场景
  19. oracle rsm 进程,Oracle 10g 的后台进程
  20. 多张照片怎么做成动图

热门文章

  1. 自制python搜索小工具,比电脑自带的还要快
  2. 信创动态| ZStack鼎甲科技完成兼容互认证
  3. http 传输 加号乱码问题
  4. thinkcmf layer弹窗
  5. 13-读《狼图腾》有感
  6. 语义分割 调色板代码
  7. 进外企工作?告诉你外企面试官最爱提的问题(不仅仅适合外企,更适合一把的求职问题)
  8. python实现动态爱心
  9. python中间件有哪些_python 中间件
  10. windows渗透测试