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

时间: 2024-10-07 01:18:47

Linux shell基础(六)的相关文章

Linux shell基础(七)

十六. 文件查找命令find: 下面给出find命令的主要应用示例:    /> ls -l     #列出当前目录下所包含的测试文件    -rw-r--r--. 1 root root 48217 Nov 12 00:57 install.log    -rw-r--r--. 1 root root      37 Nov 12 00:56 testfile.dat    -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2    -

一、Linux Shell基础

1.1.shell基础 Bash 是一个与Bourne Shell兼容的.执行从标准输入设备文件读取的命令的语言解释器.Bash是Bournae-Again Shell的缩写.Bash与原来的Unix sh Shell向后兼容,并且融合了一些有用的Korn Shell和C Shell的特性.它相对于sh在编程和交互式使用两方面都有功能改进.另外,大部分的sh脚本可以在不修改的情况下由Bash直接运行. Linux环境由以下几部分构成: 内核-------------------Linux操作系统

linux shell基础(六)awk命令(编辑中)

一.awk命令 awk是一种**编程语言**,用于在linux/unix下对文本和数据进行处理(gawk - pattern scanning and processing language).centos7中的awk是gawk的链接.它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具.前面的grep.sed只是单纯的工具,而awk已经是一门语言了,可见awk的功能将比较强大 用法: awk [options] 'script' var=value fil

linux shell基础语法

1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码: #!/bin/bash echo "Hello World !" "#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell.echo命令用于向窗口输出文本. 运行Shell脚本有两种方法. 1.1作为可执行程序 将上面的代码保存为t

Linux shell基础

shell是核心程序kernel之外的指令解析器,是一个程序,同事是一种命令语言和程序设计语言 --shell是命令解析器,用户输入命令,它去解析. shell类型 ash,bash,ksh,csh,tcsh --cat qkxue.net/etc/shells 查看系统下的shell --echo $SHELL 查看当前用户运行的shell shell中可以运行子shell --在命令行键入 1126.www.qixoo.qixoo.com/bin/dash 执行子shell --在子shel

linux shell 基础-2

管道符 fg bg sleep 变量 set 定义变量 变量分类 取消变量 环境变量配置文件 管道符 管道命令操作符是:"|",它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard error 信息没有直接处理能力.然后,传递给下一个命令,作为标准的输入 standard input. 注意: 1.管道命令只处理前一个命令正确输出,不处理错误输出 2.管道命令右边命令,必须能够接收标准输入流命令才行. fg fg命令用于

Linux shell基础(八)

十八.  和系统运行状况相关的Shell命令:    1.  Linux的实时监测命令(watch):    watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动运行.该命令最为常用的两个选项是-d和-n,其中-n表示间隔多少秒执行一次"command",-d表示高亮发生变化的位置.下面列举几个在watch中常用的实时监视命令:    /> watch -d -n 1 'who'   #每隔一秒执行一次who命令,以监视服务器当前用户登录的状

linux shell基础-1

shell history Tab键 alias 通配符 重定向功能 shell shell是一个命令解释器,提供用户和机器之间的交互:Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言. Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务. history 作用:bash内建命令,管理命令历史 语法: history [n] 不加数字默认列出内存中HISTSIZE参数设定条

Linux shell基础(九)

十九.  和系统运行进程相关的Shell命令:       1.  进程监控命令(ps):    要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令.使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵死.哪些进程占用了过多的资源等等.总之大部分信息都是可以通过执行该命令得到的.    ps命令存在很多的命令行选项和参数,然而我们最为常用只有两种形式,这里先给出与它们相关的选项和参数的含义: 选