脚本之文本练习
1)从一个目录中找出最近访问过的5个普通文件,并且要求输出文件名和最后访问时间
[root@server4 3131]# ls -lut /mnt/ | grep "^-"| head -3 | cut -c31-Mar 24 10:45 fileMar 23 16:39 nginx-install.shMar 23 16:35 nginx-1.6.2.tar.gz
解析:
-u 会显示文件的最后访问时间,-t基于访问时间来排序,排序的结果是最近访问过的文件的最后访问时间; grep “^-” 表示只针对普通文件; cut剪切命令,-c表示会保留哪些字符。-c的参数表示方式一种是通过横杠字符- 指定一个范围,另一种是用逗号连接多个范围 N 第N个字符 N- 从第N个字符开始一直到当前行结束 N-M 从第N个字符到第M个字符 -M 从第一个字符一直到M个字符。 用awk 实现[root@server4 3131]# cat 1.sh #!/bin/bash#******************#*copyleft maisui2016-03-25#*version 1function mimi() { read -p "please input the directory: " i ls -lut $i | grep "^-"| awk 'BEGIN {printf "%-8s%5s\n","time","filename"} {printf "%-8s%s\n",$8,$9}' | head -3}mimi
2)加入有两个文件,他们分别记录了员工的号码和姓名,怎么将他们一一对应起来。
[root@server4 3131]# paste name numberjunyi 18829289119huihui 18829290165ahuang 18829290116
3)求文件的平均数
[root@server4 3131]# cat file a 2 b 4 c 8 a 6 b 4[root@server4 3131]# awk '{t[$1]++} {res[$1]+=$2} END {for(i in t) {print i,res[i]/t[i]}}' filea 4b 4c 8
4)检查统计当前系统中的各种shell程序,统计他们各被多少用户所使用,并 把统计结果按照从多到少的顺序打印出来;
[root@server4 3131]# awk -F : '{re[$NF]++} END {for(i in re) {print re[i],i}}' /etc/passwd | sort -nr23 /sbin/nologin3 /bin/bash1 /sbin/shutdown1 /sbin/halt1 /bin/syncroot@server4 3131]# cat /etc/passwd | cut -d : -f7 | uniq -c | sort -nr 12 /sbin/nologin 7 /sbin/nologin 4 /sbin/nologin 2 /bin/bash 1 /sbin/shutdown 1 /sbin/halt 1 /bin/sync 1 /bin/bashUniq -c删除相同的行
5)统计一个文本中各单词出现的个数
[root@server4 3131]# cat file.sh #!/bin/bash#******************#*copyleft maisui2016-03-26#*version 1read -p "please input the file name: " filecat $file | tr '[:punct:]' ' '|\ 删除标点符号tr '[:space:]' ' ' |\ tr '[:cntrl:]' ' ' |\ 删除控制符tr '[:digit:]' ' ' |\ #删除所有数字tr '[:upper:]' '[:lower:]' |\tr -s ' ' |\ #把连续空格转换成一个空格tr ' ' '\n' |\ 把空格转换成换行符sort | uniq -c | sort -nr