shell排序,强大的sort与awk
“排序”在任何一门语言中都是最基础的功能,常见的排序对象有“文件”和“数组”,排序模式可以按照单列排序,也可以多列组合排序,排序方式有升序、降序,排序的算法就更多了,常见的有字典顺序、数组大小比较等。下文将从“排序对象”、“排序模式”、“排序方式”、“排序的算法”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相关推荐
- shell 删除文本中的重复行(sort+uniq/awk/sed) (方法=效率啊)
From: http://churuimin425.blog.163.com/blog/static/341298772012230112956712/ 删除文本中的重复行(sort+uniq/awk ...
- shell正则表达式及一些排序命令(sort、uniq、tr)
shell正则表达式及一些排序命令 文章目录 shell正则表达式及一些排序命令 一.sort命令 语法格式: 常用选项: 二.uniq命令 语法格式: 常用选项: 三.tr命令 语法格式: 常用选项 ...
- Linux Shell重定向 管道命令 grep搜索 awk编程 sed文件操作高阶函数
在编程中如果能够熟悉shell高阶语法,将对我们进阶为高级程序员有很大的帮助,本文将从Shell重定向 管道命令 awk编程 sed等方面展开介绍. 作者:有勇气的牛排 文章目录 1 shell重定向 ...
- linux的sort如何对时间排序,Linux中用Sort和Tsort对文件进行排序
通过使用 sort 和 tsort,而不是采取使用 Perl 或 Awk 的较复杂的解决方案,可以节省时间,同时还能避免令人头疼的问题.Jacek Artymiak 将向您说明如何做到这一点. 尽管可 ...
- linux sed去除重复,删除文本中的重复行(sort+uniq/awk/sed)
在进行文本处理的时候,我们经常遇到要删除重复行的情况.那怎么解决呢? 下面就是三种常见方法? 第一,用sort+uniq,注意,单纯uniq是不行的. shell> sort file | un ...
- shell脚本——grep cut sort uniq tee diff paster tr等小工具的使用方法
shell脚本的一些小工具的使用方法 grep 语法和选项 实例 cut 语法和选项 实例 sort 语法和选项 实例 uniq 语法和选项 实例 tee 语法和选项 实例 diff 语法和选项 实例 ...
- 排序算法系列:Shell 排序算法
概述 希尔排序(Shell Sort)是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2n^{2}n2) 的,希尔排序算法是突破这个时间复杂度 ...
- shell编程之文本处理工具awk
shell编程之文本处理工具awk 文章目录 shell编程之文本处理工具awk 一.awk介绍 1. awk概述 2. awk能干啥? 二.awk使用方式 1. ==命令行模式使用== ㈠ 语法结构 ...
- 算法之排序算法-shell排序(移位法)
个人觉得移位法就是借希尔排序进行分组,插入排序进行排序 注释是上一篇的交换法. 而且这种移位排序的真的很快 package com.ebiz.sort;import java.text.SimpleD ...
最新文章
- 跨境电商三单对碰三单申报流程详解
- 一次布环境,引起的总结
- MongoDB数据库的创建与删除
- dependencyManagement与dependencies区别
- [转]Fiddler模拟post四种请求数据
- css3 背景等比例,纯 CSS,不用背景,实现图片等比例展示
- jQuery图片懒加载示例(滚动函数再加载)
- 联想在华为背后“捅刀”?谁在让 5G 标准投票成闹剧
- “滚蛋吧”扎克伯格!
- 姓名的首字母组成的图案C语言怎么编,c语言编写一个程序,根据用户输入英文名和姓先显示姓氏,其后跟一个逗号,然后显示名的首字母:...
- python求绝对值_python绝对值怎么计算
- 电脑怎么安装xp系统原版镜像
- easyui datagrid mysql分页_Easyui 自定义分页_EasyUI 教程
- 厨神之路三--自制饮品
- Combined Margin loss人脸识别训练笔记
- 解决Visio用直线手画的形状不能填充问题
- 2021安徽考研计算机分数如何,2021年安徽省考研成绩公布时间
- 包装类型与引用类型的使用场景
- oracle rsm 进程,Oracle 10g 的后台进程
- 多张照片怎么做成动图