sort命令、linux计划任务

一、sort的工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
参数 作用
-n 数值排序
-r 降序
-t 字段分隔符
-k 以哪个字段为关键字进行排序
-u 排序后相同的行只显示一次
-f 排序时忽略字符大小写
1.sort -u 选项(输出行中去除重复行)
cat a.txt
在这里插入图片描述
sort -u a.txt
在这里插入图片描述
pig的重复行被去除了
cat a.txt
在这里插入图片描述
再查看文件会发现重复行还在,说明-u参数不会对文件本身做修改
2.sort -r (降序)
因为sort默认的排序方式是升序,想执行降序操作用-r
在这里插入图片描述
在这里插入图片描述
在sort 命令中排序程序将这些数字按字符来排序了,排序程序会先比较1和3,显然1小,所以就将10放在3前面
在这里插入图片描述
-r参数将他们降序排列
3.sort -n (按数值排序)
为了解决将数值当字符处理,就使用-n 参数,告诉sort要以数值排序
在这里插入图片描述
在这里插入图片描述
sort-nr 表示以数值降序
4.sort -o 参数
由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。
但是,如果想把排序结果输出到原文件中,用重定向可就不行了。
在这里插入图片描述
用重定向会把num清除
这时候sort-o 参数就派上用场了
在这里插入图片描述
5. sort的-t选项和-k选项
-t后跟间隔符
-k 是以列排序
(1) 以第二列排序
在这里插入图片描述
因为有第二列相同的,sort默认按第一列的字符排序
(2)注意:sort 设定域的优先级,先以第二个域进行排序,如果相同按照第三个域进行排序
在这里插入图片描述
(3 ) 从第一行的第二个字母开始进行排序
在这里插入图片描述
-k1.2 表示第一个域的第二个字符到 到本域的最后一个字符为止的字符串进行排序。-k1.2,1.2表示用第一个域的第二个字母排序 。如果-k1,2省略了后面的2则就变成了第一个域到最后一个域进行排序
如果第一个域第二个字母相同,默认第二个域升序排列
6.sort -k -u 选项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当以第二个域进行数值排序时,然后加-u后,dog和pig就被删除了!原来-u只识别用-k设定的域,发现相同,就将后续相同的行都删除。
在这里插入图片描述
去除第一个域相同的行
在这里插入图片描述
去除第一个域的第一个字母相同的行
在这里插入图片描述
这里设置了两层排序优先级的情况下,使用-u就没有删除任何行。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的
二、linux计划任务
1.crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

2.crontab命令
参数 描述
-u user 用来设置某个用户的crontab服务
-l 显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容
-e 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件
-i 在删除用户的crontab文件时给确认提示
-r 从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件
在这里插入图片描述
第一个 * 代表分钟 可以是从0到59之间的任何整数。
第二个 * 代表小时 可以是从0到23之间的任何整数
第三个* 代表日 可以是从1到31之间的任何整数。
第四个* 代表月 可以是从1到12之间的任何整数。
第五个代表星期 可以是从0到7之间的任何整数,这里的0或7代表星期日
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
练习

  1. 每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存文件名格式为bak_etc_2018-01-01
    touch t1.sh
    vi t1.sh
    #!/bin/bash
    tar -czf /baupup/bak_-date +%F /etc
    crontab -e
    **/4 * * * sh t1.sh
    ll /backup/
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存文件名格式为
    bak_msg_2018-01-01
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/backup/memory文件中
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 工作日的时间内,每两小时执行一次echo “hello work”
    在这里插入图片描述
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wq962464/article/details/83143359