Linux Shell常用技巧(六)
十二. 行的排序命令sort:
1. sort命令行选项:
选项 | 描述 |
-t | 字段之间的分隔符 |
-f | 基于字符排序时忽略大小写 |
-k | 定义排序的域字段,或者是基于域字段的部分数据进行排序 |
-m | 将已排序的输入文件,合并为一个排序后的输出数据流 |
-n | 以整数类型比较字段 |
-o outfile | 将输出写到指定的文件 |
-r | 倒置排序的顺序为由大到小,正常排序为由小到大 |
-u | 只有唯一的记录,丢弃所有具有相同键值的记录 |
-b | 忽略前面的空格 |
2. sort使用实例:
提示:在下面的输出结果中红色标注的为第一排序字段,后面的依次为紫、绿。
/> sed -n '1,5p' /etc/passwd > users
/> cat users
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#-t定义了冒号为域字段之间的分隔符,-k 2指定基于第二个字段正向排序(字段顺序从1开始)。
/> sort -t':' -k 1 users
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
#还是以冒号为分隔符,这次是基于第三个域字段进行倒置排序。
/> sort -t':' -k 3r users
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
#先以第六个域的第2个字符到第4个字符进行正向排序,在基于第一个域进行反向排序。
/> sort -t':' -k 6.2,6.4 -k 1r users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
#先以第六个域的第2个字符到第4个字符进行正向排序,在基于第一个域进行正向排序。和上一个例子比,第4和第5行交换了位置。
/> sort -t':' -k 6.2,6.4 -k 1 users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#基于第一个域的第2个字符排序
/> sort -t':' -k 1.2,1.2 users
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#基于第六个域的第2个字符到第4个字符进行正向排序,-u命令要求在排序时删除键值重复的行。
/> sort -t':' -k 6.2,6.4 -u users
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
/> cat /etc/passwd | wc -l #计算该文件中文本的行数。
39
/> sed -n '35,$p' /etc/passwd > users2 #取最后5行并输出到users2中。
/> cat users2
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
#基于第3个域字段以文本的形式排序
/> sort -t':' -k 3 users2
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#基于第3个域字段以数字的形式排序
/> sort -t':' -k 3n users2
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
stephen:x:500:500:stephen:/home/stephen:/bin/bash
#基于当前系统执行进程的owner名排序,并将排序的结果写入到result文件中
/> ps -ef | sort -k 1 -o result
十三. 删除重复行的命令uniq:
uniq有3个最为常用的选项,见如下列表:
选项 | 命令描述 |
-c | 可在每个输出行之前加上该行重复的次数 |
-d | 仅显示重复的行 |
-u | 显示为重复的行 |
/> cat testfile
hello
world
friend
hello
world
hello
#直接删除未经排序的文件,将会发现没有任何行被删除
/> uniq testfile
hello
world
friend
hello
world
hello
#排序之后删除了重复行,同时在行首位置输出该行重复的次数
/> sort testfile | uniq -c
1 friend
3 hello
2 world
#仅显示存在重复的行,并在行首显示该行重复的次数
/> sort testfile | uniq -dc
3 hello
2 world
#仅显示没有重复的行
/> sort testfile | uniq -u
friend
十四. 文件压缩解压命令tar:
1. tar命令行选项
选项 | 命令描述 |
-c | 建立压缩档案 |
-x | 解压 |
--delete | 从压缩包中删除已有文件,如果该文件在包中出现多次,该操作其将全部删除。 |
-t | 查看压缩包中的文件列表 |
-r | 向压缩归档文件末尾追加文件 |
-u | 更新原压缩包中的文件 |
-z | 压缩为gzip格式,或以gzip格式解压 |
-j | 压缩为bzip2格式,或以bzip2格式解压 |
-v | 显示压缩或解压的过程,该选项一般不适于后台操作 |
-f | 使用档案名字,这个参数是最后一个参数,后面只能接档案名。 |
2. tar使用实例:
#将当前目录下所有文件压缩打包,需要说明的是很多人都习惯将tar工具压缩的文件的扩展名命名为.tar
/> tar -cvf test.tar *
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
/> cp ../*.log . #从上一层目录新copy一个.log文件到当前目录。
/> tar -rvf test.tar *.log #将扩展名为.log的文件追加到test.tar包里。
/> tar -tvf test.tar
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
-rw-r--r-- root/root 48217 2011-11-11 22:16 install.log
/> touch install.log #使原有的文件更新一下最新修改时间
/> tar -uvf test.tar *.log #重新将更新后的log文件更新到test.tar中
/> tar -tvf test.tar #从输出结果可以看出tar包中多出一个更新后install.log文件。
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
-rw-r--r-- root/root 48217 2011-11-11 22:16 install.log
-rw-r--r-- root/root 48217 2011-11-11 22:20 install.log
/> tar --delete install.log -f test.tar #基于上面的结果,从压缩包中删除install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f users users2 #从当前目录将tar中的两个文件删除
/> tar -xvf test.tar #解压
/> ls -l users* #仅列出users和users2的详细列表信息
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
#以gzip的格式压缩并打包,解压时也应该以同样的格式解压,需要说明的是以该格式压缩的包习惯在扩展名后加.gz
/> tar -cvzf test.tar.gz *
/> tar -tzvf test.tar.gz #查看压缩包中文件列表时也要加z选项(gzip格式)
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f users users2 install.log
/> tar -xzvf test.tar.gz #以gzip的格式解压
/> ls -l *.log users*
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f test.* #删除当前目录下原有的压缩包文件
#以bzip2的格式压缩并打包,解压时也应该以同样的格式解压,需要说明的是以该格式压缩的包习惯在扩展名后加.bz2
/> tar -cvjf test.tar.bz2 *
/> tar -tjvf test.tar.bz2 #查看压缩包中文件列表时也要加j选项(bzip2格式)
-rw-r--r-- root/root 48217 2011-11-11 22:50 install.log
-rw-r--r-- root/root 183 2011-11-11 08:02 users
-rw-r--r-- root/root 279 2011-11-11 08:45 users2
/> rm -f *.log user*
/> tar -xjvf test.tar.bz2 #以bzip2的格式解压
/> ls -l
-rw-r--r--. 1 root root 48217 Nov 11 22:50 install.log
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 183 Nov 11 08:02 users
-rw-r--r--. 1 root root 279 Nov 11 08:45 users2
十五. 大文件拆分命令split:
下面的列表中给出了该命令最为常用的几个命令行选项:
选项 | 描述 |
-l | 指定行数,每多少分隔成一个文件,缺省值为1000行。 |
-b | 指定字节数,支持的单位为:k和m |
-C | 与-b参数类似,但切割时尽量维持每行的完整性 |
-d | 生成文件的后缀为数字,如果不指定该选项,缺省为字母 |
/> ls -l
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
/> split -b 5k test.tar.bz2 #以每文件5k的大小切割test.tar.bz2
/> ls -l #查看切割后的结果,缺省情况下拆分后的文件名为以下形式。
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 5120 Nov 11 23:34 xaa
-rw-r--r--. 1 root root 5120 Nov 11 23:34 xab
-rw-r--r--. 1 root root 290 Nov 11 23:34 xac
/> rm -f x* #删除拆分后的小文件
/> split -d -b 5k test.tar.bz2 #-d选项以后缀为数字的形式命名拆分后的小文件
/> ls -l
-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
-rw-r--r--. 1 root root 5120 Nov 11 23:36 x00
-rw-r--r--. 1 root root 5120 Nov 11 23:36 x01
-rw-r--r--. 1 root root 290 Nov 11 23:36 x02
/> wc install.log -l #计算该文件的行数
/> split -l 300 install.log #每300行拆分成一个小文件
/> ls -l x*
-rw-r--r--. 1 root root 11184 Nov 11 23:42 xaa
-rw-r--r--. 1 root root 10805 Nov 11 23:42 xab
-rw-r--r--. 1 root root 12340 Nov 11 23:42 xac
-rw-r--r--. 1 root root 11783 Nov 11 23:42 xad
-rw-r--r--. 1 root root 2105 Nov 11 23:42 xae
Linux Shell常用技巧(六)的更多相关文章
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
- Linux Shell常用技巧(目录)
Linux Shell常用技巧(一) http://www.cnblogs.com/stephen-liu74/archive/2011/11/10/2240461.html一. 特殊文件: /dev ...
- [转帖]拿小本本记下的Linux Shell常用技巧(一)
拿小本本记下的Linux Shell常用技巧(一) https://zhuanlan.zhihu.com/p/73361101 一. 特殊文件: /dev/null和/dev/tty Linux系统提 ...
- [转帖]Linux Shell常用技巧(五)
Linux Shell常用技巧(五) https://zhuanlan.zhihu.com/p/73451771 1. 变量:在awk中变量无须定义即可使用,变量在赋值时即已经完成了定义.变量的类型可 ...
- Linux Shell常用技巧
转载自http://www.cnblogs.com/stephen-liu74/ 一. 特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文 ...
- Linux Shell常用技巧(一) RE
一. 特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty.其中/dev/null将会丢掉所有写入它 ...
- Linux Shell常用技巧(七)
十六. 文件查找命令find: 下面给出find命令的主要应用示例: /> ls -l #列出当前目录下所包含的测试文件 -rw-r--r--. 1 root root 48 ...
- Linux Shell常用技巧(一)
一. 特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文件,/dev/null和/dev/tty.其中/dev/null将会丢掉所有写入它 ...
- Linux Shell常用技巧(九)
十九. 和系统运行进程相关的Shell命令: 1. 进程监控命令(ps): 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时 ...
随机推荐
- PHP通过api上传图片
参考:接口实现图片上传 提交端: $url="localhost:805/rdyc/123.jpg"; $img=file_get_contents($url); $img_api ...
- 【webpack】从零开始学webpack
背景:目前公司的项目全是用vue写的,建项目的话使用的是用vue-cli直接配置好的webpack,进行打包.现在我就是想实现自己写一个类似vue-cli的架子 一.安装全局依赖 npm instal ...
- 强网杯2018 pwn复现
前言 本文对强网杯 中除了 2 个内核题以外的 6 个 pwn 题的利用方式进行记录.题目真心不错 程序和 exp: https://gitee.com/hac425/blog_data/blob/m ...
- TOMCAT配置SSL认证为HTTPS协议服务
1 . 问题概述 很多安全性要求较高的系统,都会使用安全套接字层(SSL)进行信息交换, Sun为了解决在Internet上的实现安全信息传输的解决方案.它实现了SSL和TSL(传输层安全)协议 ...
- EF增删查改基类
/// <summary> /// EF DAL CURD基类 /// </summary> /// <typeparam name="T">& ...
- BASE_DIR 拼接文件路径
# C:/Disk_D/pycharm_stu/macboy/blog/views/tt.py 当前文件绝对路径 BASE_DIR = os.path.dirname(os.path.dirname( ...
- 微软MVP社区秋日巡讲 —— 北京Windows Phone应用开发训练营
微软MVP社区秋日巡讲 —— 北京Windows Phone应用开发训练营 活动说明和报名地址www.aka.ms\mvpbeijing 欢迎北京的朋友参与在今年10月举办的Windows Phon ...
- CSS 小结笔记之背景
背景相关属性主要有: background-color 背景颜色 background-image 背景图片 background-repeat 是否平铺 repeat (默认平铺) | repea ...
- windows操作系统中安装、启动和卸载memcached
今天总结一下如何在Windows操作系统中安装.启动和卸载memcached:下载地址: http://download.csdn.net/download/wangshuxuncom/8249501 ...
- Oracle EBS AP 供应商取值
SELECT --nvl(substr(po.vendor_name,1,instr(po.vendor_name,',',1)-1),po.vendor_name) vendor_name, po. ...