脚本之文本练习
1)从一个目录中找出最近访问过的5个普通文件,并且要求输出文件名和最后访问时间
[root@server4 3131]# ls -lut /mnt/ | grep "^-"| head -3 | cut -c31-
Mar 24 10:45 file
Mar 23 16:39 nginx-install.sh
Mar 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 1
function mimi() {
read -p "please input the directory: " i
ls -lut $i | grep "^-"| awk 'BEGIN {printf "%-8s%5s
","time","filename"} {printf "%-8s%s
",$8,$9}' | head -3
}
mimi
2)加入有两个文件,他们分别记录了员工的号码和姓名,怎么将他们一一对应起来。
[root@server4 3131]# paste name number
junyi 18829289119
huihui 18829290165
ahuang 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]}}' file
a 4
b 4
c 8
4)检查统计当前系统中的各种shell程序,统计他们各被多少用户所使用,并 把统计结果按照从多到少的顺序打印出来;
[root@server4 3131]# awk -F : '{re[$NF]++} END {for(i in re) {print re[i],i}}' /etc/passwd | sort -nr
23 /sbin/nologin
3 /bin/bash
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
root@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/bash
Uniq -c删除相同的行
5)统计一个文本中各单词出现的个数
[root@server4 3131]# cat file.sh
#!/bin/bash
#******************
#*copyleft maisui2016-03-26
#*version 1
read -p "please input the file name: " file
cat $file | tr '[:punct:]' ' '| 删除标点符号
tr '[:space:]' ' ' |
tr '[:cntrl:]' ' ' | 删除控制符
tr '[:digit:]' ' ' | #删除所有数字
tr '[:upper:]' '[:lower:]' |
tr -s ' ' | #把连续空格转换成一个空格
tr ' ' '
' | 把空格转换成换行符
sort | uniq -c | sort -nr