『忘了再学』Shell基础 — 31、字符处理相关命令
1、排序命令sort
(1)sort命令介绍
sort命令可针对文本文件的内容,以行为单位来排序。
命令格式如下:
[root@localhost ~]# sort [选项] 文件名
选项:
-f:忽略大小写。-b:忽略每行前面的空白部分。-n:以数值型进行排序,sort命令默认使用字符串型排序。-r:反向排序。-u:删除重复行。就是uniq命令。-t:指定分隔符,sort命令默认的分隔符是制表符。-k [n,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)。
(2)练习
以下练习默认文本内容如下:
java haha 3
python lala 77
shell dudu 23
hello world 12
linxu xixi 6
1)示例1
sort命令默认是用每行开头第一个字符来进行排序的。
执行sort排序命令:
# 默认按行首字符进行排序
[root@localhost tmp]# sort test.txt
hello world 12
java haha 3
linxu xixi 6
python lala 77
shell dudu 23
如果想要反向排序,请使用-r选项:
# 反向排序
[root@localhost tmp]# sort -r test.txt
shell dudu 23
python lala 77
linxu xixi 6
java haha 3
hello world 12
2)示例2
按照文档中,每行的指定字段进行排序。
需要使用-k选项:
# -k 2,2表示:指定按照第二个字段排序
# 2,2表示第2个字段开始,到第2个字段结束
[root@localhost tmp]# sort -k 2,2 test.txt
shell dudu 23
java haha 3
python lala 77
hello world 12
linxu xixi 6
注意:文本中字段之间的分隔是制表符,默认识别。
3)示例3
按照数字进行排序,根据文本中的内容,我们需要按照第三列进行排序。
[root@localhost tmp]# sort -k 3,3 test.txt
hello world 12
shell dudu 23
java haha 3
linxu xixi 6
python lala 77
我们发现按照第三列内容进行排序的结果,有点不正确,3和6怎么排在12的后边了。
是因为sort命令并没有把第三列的数据当作数字,默认是识别成字符串,所以是按照字符串的规则来排序的,也就是按第一位的数字进行排序的。
我们需要添加sort命令的-n选项,就可以解决上述问题了。也就是让sort命令把第三列按数值进行排序。
[root@localhost tmp]# sort -n -k 3,3 test.txt
java haha 3
linxu xixi 6
hello world 12
shell dudu 23
python lala 77
4)示例4
如果想要指定排序的字段,并且文本中字段间的分隔符不是制表符,这个时候就需要使用-t选项指定分隔符,并使用-k选项指定字段号。
如下面文本:
java:haha:3
python:lala:77
shell:dudu:23
hello:world:12
linxu:xixi:6
需求:按文本内容中的第三列数字进行排序。
[root@localhost tmp]# sort -t ":" -n -k 3,3 test.txt
java:haha:3
linxu:xixi:6
hello:world:12
shell:dudu:23
python:lala:77
2、取消重复行命令uniq
uniq命令是用来取消重复行的命令,其实和sort -u选项是一样的。
命令格式如下:
[root@localhost ~]# uniq [选项] 文件名
选项:
-i:忽略大小写。
练习:
student.txt文本内容如下:
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33
4 Shahs 66 65 64 63.33
我们可以看到student.txt文本的ID为2、3、4的信息有重复。
使用uniq命令删除重复的行后,有如下输出结果:
[root@localhost tmp]# uniq student.txt
ID Name Python Linux MySQL Java
1 Tangs 88 87 86 85.55
2 Sunwk 99 98 97 96.66
3 Zhubj 77 76 75 74.44
4 Shahs 66 65 64 63.33
3、统计命令wc
wc命令是统计文档中行数,字符数,字节数等信息。
命令格式如下:
[root@localhost ~]# wc [选项] 文件名
选项:
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
练习1:
在默认的情况下,wc命令将计算指定文件的行数、字数,以及字节数。
# 行数为5、单词数30、字节数124
[root@localhost tmp]# wc student.txt
5 30 124 student.txt
练习2:
查看特定的统计信息,只看行数和字节数。
# 行数为5、字节数124
[root@localhost tmp]# wc -lm student.txt
5 124 student.txt
练习3:
同时查看多个文件的统计信息。
[root@localhost tmp]# wc student.txt test2.txt
5 30 124 student.txt
8 37 318 test2.txt
13 67 442 总用量
『忘了再学』Shell基础 — 31、字符处理相关命令的更多相关文章
- 『忘了再学』Shell基础 — 19、使用declare命令声明变量类型
目录 1.declare命令介绍 2.声明数组变量类型 3.声明变量为环境变量 4.声明只读属性 5.补充: 1.declare命令介绍 Shell中所有变量的默认类型是字符串类型,如果你需要进行特殊 ...
- 『忘了再学』Shell基础 — 10、Bash中的特殊符号(二)
提示:本篇文章接上一篇文章,主要说说()小括号和{}大括号的区别与使用. 8.()小括号 ():用于一串命令执行时,()中的命令会在子Shell中运行.(和下面大括号一起说明) 9.{}大括号 {}: ...
- 『忘了再学』Shell基础 — 25、扩展正则表达式
目录 1.扩展正则表达式说明 2.练习 (1)+和?练习 (2)|和()练习 3.注意(重点) 1.扩展正则表达式说明 熟悉正则表达式的童鞋应该很疑惑,在其他的语言中是没有扩展正则表达式说法的,在Sh ...
- 『忘了再学』Shell基础 — 2、Shell的作用与分类
目录 1.Shell的作用 2.Shell的分类 1.Shell的作用 Shell除了能解释用户输入的命令,将它传递给内核,还可以: 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果. 在 ...
- 『忘了再学』Shell基础 — 5、Bash基本功能(命令的别名和常用快捷键)
目录 1.给命令设置别名 (1)设置别名的命令格式 (2)命令别名永久生效 (3)别名的优先级 2.Bash常用快捷键 1.给命令设置别名 Linux系统的命令别名我们之前已经说过了,这里再过一边. ...
- 『忘了再学』Shell基础 — 3、echo命令的介绍与使用
目录 1.echo命令的作用 2.echo命令的基本用法 3.echo命令的-e选项用法 4.echo命令一些特殊用法 (1)输出字符带有字体颜色 (2)输出字符带有背景颜色 在讲Shell脚本之前, ...
- 『忘了再学』Shell基础 — 24、Shell正则表达式的使用
目录 1.正则表达式说明 2.基础正则表达式 3.练习 (1)准备工作 (2)*练习 (3).练习 (4)^和$练习 (5)[]练习 (6)[^]练习 (7)\{n\}练习 (8)\{n,\}练习 ( ...
- 『忘了再学』Shell基础 — 30、sed命令的使用
目录 1.sed命令说明 2.行数据操作 (1)查看文件中的数据 (2)删除文件中的数据 (3)向文件中追加数据 (4)向文件中插入数据 (5)修改文件中的多行数据(删除,追加,插入) (6)替换文件 ...
- 『忘了再学』Shell基础 — 1、Shell的介绍
目录 1.Shell的由来 2.Shell的两种执行指令方式 3.什么是Shell脚本 4.Shell 是一种脚本语言 1.Shell的由来 我们比较熟悉Windows系统的图形化界面,对于图形界面来 ...
随机推荐
- 【UWP】实现一个波浪进度条
好久没写 blog 了,一个是忙,另外一个是觉得没啥好写.废话不多说,直接上效果图: 可能看到这波浪线你觉得会很难,但看完这篇 blog 后应该你也会像我一样恍然大悟.图上的图形,我们可以考虑是由 3 ...
- phpshe xml注入
*php商城系统 xml注入* **页面样式* *Xml原理参考:* https://www.cnblogs.com/20175211lyz/p/11413335.html *漏洞函数simplexm ...
- 网络协议之:socket协议详解之Unix domain Socket
目录 简介 什么是Unix domain Socket 使用socat来创建Unix Domain Sockets 使用ss命令来查看Unix domain Socket 使用nc连接到Unix do ...
- redis集群在线迁移第一篇(数据在线迁移至新集群)实战一
迁移背景:1.原来redis集群在A机房,需要把其迁移到新机房B上来.2.保证现有环境稳定.3.采用在线迁移方式,因为原有redis集群内有大量数据.4.如果是一个全新的redis集群搭建会简单很多. ...
- Java实现负载均衡算法--轮询和加权轮询
1.普通轮询算法 轮询(Round Robin,RR)是依次将用户的访问请求,按循环顺序分配到web服务节点上,从1开始到最后一台服务器节点结束,然后再开始新一轮的循环.这种算法简单,但是没有考虑到每 ...
- 《手把手教你》系列基础篇(八十六)-java+ selenium自动化测试-框架设计基础-Log4j实现日志输出(详解教程)
1.简介 自动化测试中如何输出日志文件.任何软件,都会涉及到日志输出.所以,在测试人员报bug,特别是崩溃的bug,一般都要提供软件产品的日志文件.开发通过看日志文件,知道这个崩溃产生的原因,至少知道 ...
- Logistic regression中regularization失败的解决方法探索(文末附解决后code)
在matlab中做Regularized logistic regression 原理: 我的代码: function [J, grad] = costFunctionReg(theta, X, y, ...
- 给swap分区扩容
一.先添加一块硬盘,如果硬盘空间还有没有被分区的也可以使用,再创建一个分区(分区可以是主分区或者扩展的逻辑分区) fdisk /dev/sdb n 代表创建分区 p 代表 ...
- 使用 Vert.X Future/Promise 编写异步代码
Future 和 Promise 是 Vert.X 4.0中的重要角色,贯穿了整个 Vert.X 框架.掌握 Future/Promise 的用法,是用好 Vert.X.编写高质量异步代码的基础.本文 ...
- 2022年最新Cloudflare免费自选IP教程(非Partner)
写在开头 众所周知,CF在去年底大规模禁用Host API key,使得Partner自选法失效.但最近,Cloudflare为所有计划添加了100个SaaS域免费额度(以前$2一个). 经过一番摸索 ...