shell编程——基本文本处理(三)之使用sort命令对文本进行排序
1 sort命令的基本用法
sort命令有三种执行模式,分别为排序文本、检查文件是否已经排序以及合并文件
sort [option]...[file]...
file参数是要排序的文件列表,多个文件名之间用空格隔开。
如果不使用任何关键字(sort demo.txt),则sort会将整个文本行作为关键字进行排序,其排序规律是首先比较第一列,如果值相同则比较第二列,以此类推。
2 使用单个关键字排序
在某些情况下,用户可能不需要所有的列都参与排序,只需要根据其中的几个列进行比较,这种情况下可以使用-k选项来定义排序关键字,其基本语法如下:
-k pos1[,pos2]
pos1表示排序关键字的起始位置,pos2表示排序关键字的结束位置,这两者之间用逗号隔开。
sort -k 2,3 demo.txt //使用两个列作为一个关键字来进行排序,程序首先会根据第2列进行排序,在第2列形同的情况下,再根据第3列排序。
sort命令中一个文本行只能包括10列
-k pos
表示从pos参数指定的列开始,一直到文本的结束都是排序关键字。sort在排序的时候会从pos指定的列开始,一直比较到行尾。
将列中的一个小子串作为排序关键字的组成部分:
-k pos1[.start][,pos2.[end]]
从pos1列的第start个字符开始,一直到第pos2列的第end个字符结束,都是排序关键字的组成部分。
列号和字符位置编号都从1开始,如果省略了start,则表示从第1个字符开始,如果省略了end,则表示到最后一个字符结束。
根据某个指定的列排序:
-k pos,pos
-k pos[.start],pos[.end]
3 根据关键字降序排列
-r选项是作为全局选项使用,其作用对象为sort命令中所有没有附件修饰符的列
修饰符r可以附加在组成关键字的列号后面,其作用域为所附加的列
sort -r -k 2,3 demo.txt等价于
sort -k 2,3r demo.txt等价于sort -k 2r,3r demo.txt等价于sort -k 2r,3 demo.txt
4 数值列的排序
在默认情况下,sort命令会将所有的列看做字符串,并且按照字符串的排序规则进行排序。为了使sort命令能够正确地处理数值字段,用户需要使用-n选项或者修饰符n。
sort -n -k 3,3 demo.txt等价
sort -k 3,3n demo.txt
修饰符可以多个使用:sort -k 3,3nr demo.txt
如果对非数值列使用-n选项或者修饰符,会导致不可预料的后果
5 自定义分隔符
在默认情况下,sort命令会将连续的空格或制表符作为列的分隔符,但是在实践中,可能会存在这其他分隔符,如冒号、逗号或者分号。
sort命令提供了一个-t选项,可以使得用户自己来指定自己需要的列分隔符
sort -t : -k 3n,3 /etc/password
6 删除重复的行
-u选项可以去掉重复的行
sort -u demo.txt
7 根据多个关键字排序
用户可以在sort命令中同时指定多个关键字,sort命令会根据各个关键字依次来排序
sort -k 3,3nr -k 4,4n demo.txt
定义的两个关键字都使用了修饰符,这些修饰符仅仅作用于所附加的关键字本身,并不影响其他的关键字。
sort -t : -n -k 5b,5 -k 3,3 /etc/passwrd
由于第一个关键字已经有了一个修饰符b,所以sort命令会认为第1个关键字不再需要修饰符,只将-n选项作用于第2个关键字-k 3,3
稳定排序:在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变
8 使用sort命令合并文件夹
使用sort命令可以很方便地合并多个文件,同时将文本文件的内容进行排序:
sort file1 file2
利用-u去掉重复的行
如果用户只想将两个文件合并,不想执行排序处理,可以使用sort -m 选项
shell编程——基本文本处理(三)之使用sort命令对文本进行排序相关推荐
- shell编程系列23--shell操作数据库实战之mysql命令参数详解
shell编程系列23--shell操作数据库实战之mysql命令参数详解mysql命令参数详解-u 用户名-p 用户密码-h 服务器ip地址-D 连接的数据库-N 不输出列信息-B 使用tab键代替 ...
- shell 倒数第n列_【零基础学云计算】Shell编程之正则表达式(三)
awk工具 在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理,可以在无交互的情况下实现相当 ...
- Linux shell编程学习笔记---第三章
3.1正则表达式基础 正则表达式的主要功能是文本查询和字符串操作.实际上就是字符串过滤. 正则表达式包括普通字符(a,b,1,2等)他们都只有字面意思和元字符(*,^等)他们超越了字面意思,被给予了附 ...
- shell编程之进阶篇三常见命令详解
常见命令详解 接下来我们介绍一些shell脚本中经常使用的linux命令:grep.sed.awk.find grep命令详解 grep命令是我们常用的一个强大的文本搜索命令. 命令格式详解 grep ...
- 编程语言和shell编程的基础内容以及grep、egrep命令及相应的正则表达式和用法...
bash的特性之多命令执行的逻辑关系: 1.命令替换 COMMAND1 $(COMMAND2) 2.管道 COMMAND1 | COMMAND2 | COMMAND3 ... 3.顺序执行结构 COM ...
- 高级shell编程笔记(第十三章 系统与管理命令)
第十三章 系统与管理命令 在/etc/rc.d 目录中的启动和关机脚本中包含了好多有用的(和没用的)这些系统管理命令.这些命令通常总是被 root 用户使用,用与系统维护或者是紧急文件系统修复.一定要 ...
- Shell编程——退出状态(if语句判断某个命令的退出状态)
以下内容源于C语言中文网的学习与整理,如有侵权,请告知删除. 一.退出状态 (1)不管是 Bash 内置命令,还是外部的 Linux 命令,还是自定义的 Shell 函数,当它运行结束或者退出时,都会 ...
- Shell脚本编程基础 三 使用结构化命令
结构化命令允许我们改变程序执行的顺序,在某些条件下执行一些命令而在其他条件下跳过另一些命令. (1)使用if-then语句 结构化命令中,最基本的类型就是if-then语句,其格式如下: if com ...
- gnu linux额外支持的运算符,《Shell编程从入门到精通》张昊-chap1-8
缘起 20190314开始复习及学习吧: 张昊编著: 内容 目录 i(9/314) 全书11章 chap1 第1个Shell程序 1(13/334) 1.1.第一道菜 [echo.sh] #!/bin ...
最新文章
- PTA数据结构与算法题目集(中文)7-14
- 如何查看一个jar文件是用什么版本jdk编译的?
- 【Python基础】字符编码ASCII-GBK-Unicode-UTF-8之间的关系
- ML之GB:GB算法相关论文、相关思路、关键步骤、代码实现、配图集合、案例应用之详细攻略
- git commit或者pull代码时提示代码冲突解决方法
- html4基础,HTML 基础 4
- 骆俊武:五年了,我的技术管理成长之路
- idea拦截了html中的静态资源,IDEA配置静态资源热加载操作(Springboot修改静态资源不重启)...
- 雷林鹏分享:jQuery EasyUI 菜单与按钮 - 创建链接按钮
- OpenJDK8:只有x86和sparcv9才能出32位的版本
- w10 桌面计算机垃圾桶,win10垃圾桶图标不见了怎么办
- 《骆昊-Java面试题全集(中)》学习笔记_2018_12_17
- 【跨年烟花代码】用C语言来写“烟花”,快拿去给心中的那个人看
- mapboxgl 互联网地图纠偏插件(一)
- .ps是什么格式_用Word修图,真的比PS简单十倍不止!可惜知道的人太少了......
- perl和bugzilla
- SH-SSS丨《ISSD: 基于迭代式语音分离的说话人日志系统》论文线上分享
- 三维视觉之结构光原理详解
- Python多线程编程之线程子类化
- 关于企业价值观的一点点感悟