shell脚本学习(7)sort
1 sort的格式
sort [options] [files]
sort 参数 文件
2 参数 -t 用单个符char作为默认的字段分隔符, 默认字段分隔符是空白
参数-k 用来定义排序键值字段
一般是 -t分割好字段, 再在字段中
原始数据
t:说明原数据 按:分段
k1 说明指定字段1, 键值会从该字段的开始, 一直到字段结束而非字段的结尾。(也就是范围很大咯)
排序1 这种排序没看出是做什么用的
sort -t: -k1 /etc/passwd
排序2 k用逗号修饰, 表示排序键值由第一个字段值的开始出开始, 结束于第二个字段的结尾位置
这里1,1 是说键值用第一个字段表示
sort -t: -k1, /etc/passwd
和上面的结果没差别,但理论上不同
排序3 指定键值为第三段,并按数字比较,然后倒叙
sort -t: -k3,3nr /etc/passwd
k的修饰符 n 表示按照数字(整数)比较
k的修改符 r 表示按照倒置排序
排序 4 先按字段4的整数排序, 再按字段3 的整数排序
通过写两个 -k 字段号,字段号n来实现
sort -t: -k4,4n -k3,3n /etc/passwd
比对这3组可以看出是先看第四字段排序了, 再按第三字段排
排序 5 只输出位置的排序记录,有点拗口, 就是比对的键值重复出现
sort -t: -k4,4n -u /etc/passwd
比如这个时候就没有两行都带7的了。
排序6 文本块排序
地址和清单, 多行文字当做一个数据块的文本块排序
使用awk gsub配合RS变量(输入数据记录分隔符) ORS变量(输出数据记录分隔符)处理
比如想按这三段来排序
awk -v RS="" '{gsub("\n", "^Z"); print}' do.txt
RS=""把记录按空行隔开
gsub()函数, 能把"\n" 替换成 “^z” 这样输入的问题就被处理了, 接下来只要排序这三行, 最后还原被替换的数据就可以了。
awk -v RS="" '{gsub("\n", "^Z"); print}' do.txt | sort -f
用sort -f不区分字母大小的排序
awk -v RS="" '{gsub("\n", "^Z"); print}' do.txt | sort -f | awk -v ORS="\n\n" '{gsub("^Z", "\n"); print}'
在行和行之间加\n换回原来的格式
ORS=“\n\n” 保持用空白行分割输出记录, 如果只写一个"\n" 效果就作文一样的 ,一行一行没分割的效果。
冒泡 插入 快排少量数据时处理速度都还好,大数据时几乎是n^2
sort排序执行时间和记录的数量成正比, 有被优化调整, 可以省下学排序算法的时间。
稳定性:相同的记录输入顺序,是否在输出是也可以保持原状, sort这方面不稳定, 要加--statble弥补
7 sort的删除重复操作:
配合uniq -c 计数唯一的, 显示重复的次数
sort do.txt |uniq -c
原始数据:
用uniq -c的
显示重复的字段
sort do.txt |uniq -d
-d的功能:只显示重复的数据
显示未重复的字段
sort do.txt |uniq -u
-u的功能:显示未重复的数据
shell脚本学习(7)sort的更多相关文章
- Shell脚本学习指南笔记
Shell脚本学习指南 作者:Danbo 2015-8-3 脚本编程语言与编译型语言的差异 许多中型.大型的程序都是用编译型语言写的,例如:C.C+.Java等.这类程序只要从源代码(Source C ...
- 笔记——shell脚本学习指南
<shell脚本学习指南>机械工业出版 ISBN 987-7-111-25504-8 第2章 2.4 初级陷阱 1.当今的系统,对#!这一行的长度限制从63到1024个字符都有,尽量不要超 ...
- Shell 脚本学习资料搜集
Shell文档 ChinaUnix上大神“網中人”总结的Shell十三问,强烈推荐,这本书讲得比较精炼,而且都是一些Shell学习中容易把握不住的一些细节难点.每一问都写得非常精彩.ChinaUnix ...
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...
- 转 shell脚本学习指南
shell脚本学习指南 以下八点不敢说就能成为你shell脚本学习指南de全部,至少可以让你编写出可靠的shell脚本. 1. 指定bashshell 脚本的第一行,#!之后应该是什么?如果拿这个问题 ...
- Shell脚本学习 - 运算符
继续shell脚本学习.上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作. 运算符 bash不支持简单的数学计算,需要依赖其他命令实现. expr可以代为实现. # 表达式一般这么写 ` + ...
- shell脚本学习总结02--数组
bash同时支持普通数组个关联数组,普通数组只能使用整数作为数组的索引,关联数组可以使用字符串作为数组的索引. 数组的定义方法: 在单行中使用一列值定义一个数组 [root@new ~]# array ...
- shell脚本学习之6小时搞定(1)
shell脚本学习之6小时搞定(1) 简介 Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本. Unix/Linux上常见的Shell脚本解释器有bash.sh.csh.ksh等,习惯上把 ...
- shell脚本学习(一)
Shell脚本最常用于系统管理工作,或者用于结合现有的程序以完成小型.特定的工作. Shell的特点有: 1. 简单性 2. 可移植性 3. 开发容易 [什么是shell] 简单点理解,就是系统跟计算 ...
- shell脚本学习心得
近来主要捣鼓ubuntu,大多数项目中都用到了sh脚本作为启动脚本等,以前只是大概明白如何使用,今天需要自己修改并运行脚本就碰到了很多问题,所以决定静下心来学习一下shell脚本,学习了几个小时,现将 ...
随机推荐
- ubuntu 配置pptp
PPTP是点对点隧道协议,用于在公网上建立两个节点之间的专用用网络.普通的用户一般是通过拨号的方式,接入ISP提供的网络,由于国内的上网环境,是访问不了google的,所以必须首先要有一台可以上goo ...
- OAuth 2.0 综述
OAuth 2.0 rfc6749 规范 OAuth 2.0 rfc6749 规范-带目录,阅读 RFC 文档的 工具 OAuth 官网 OAuth2 核心 角色 Token 类型 access to ...
- 【ABAP系列】SAP 的逻辑数据库解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP 的逻辑数据库解析 前 ...
- mysql行锁和死锁检测
行锁顾名思义,就是针对单行数据加锁,在mysql中,锁的实现是由引擎层实现的,MyISAM引擎就不支持行锁 不支持行锁就意味着并发控制只能使用表锁,也就是说同一时间,在这个表上只能有一个更新在执行,这 ...
- iintellij IDEA运行环境使用教程
1.官网:https://www.jetbrains.com 链接: https://pan.baidu.com/s/10QKLn1bGEW9W0pXEp6WR1A 提取码: vt2b 看官觉得有用留 ...
- 组件化框架设计之AOP&IOC(四)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将从以下两个方面来介绍组件化框架设计: [AOP(面向切 ...
- Java并发编程:线程的同步
Java并发编程:线程的同步 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...
- vmware 15安装centos 7.6
环境: Vmware 15 centos 7.6.1810(CentOS-7-x86_64-DVD-1810.iso) centos:centos是linux发行版之一,开源,免费,安装的iso可以向 ...
- google+ sign in and get the oauth token 转摘:https://gist.github.com/ianbarber/5170508
package com.example.anothersignintest; import java.io.IOException; import com.google.android.gms ...
- 17-正交矩阵和Gram-Schmidt正交化
一.视频链接 1)正交矩阵 定义:如果一个矩阵,其转置与自身的乘积等于单位向量,那么该矩阵就是正交矩阵,该矩阵一般用Q来表示,即$Q^TQ=QQ^T=I$,也就是$Q^T=Q^{-1}$,即转置=逆 ...