脚本之文本练习

脚本之文本练习

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\n","time","filename"} {printf "%-8s%s\n",$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 ' ' '\n' |\ 把空格转换成换行符
sort | uniq -c | sort -nr

posted @ 2016-07-26 15:24  夏日花开  阅读(147)  评论(0)    收藏  举报