zoukankan      html  css  js  c++  java
  • 脚本之文本练习

    脚本之文本练习

    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
    

  • 相关阅读:
    面试题15 链表中倒数第k个结点
    面试题14 调整数组顺序使奇数位于偶数前面
    面试题13 在O(1)时间删除链表结点
    面试题12 打印1到最大的N位数
    面试题11 数值的整数次方
    面试题10 二进制中1的个数
    面试题9 斐波那契数列
    面试题8 旋转数组的最小数字
    关于神经网络训练的一些建议笔记
    两篇将rf和boosting方法用在搜索排序上的paper
  • 原文地址:https://www.cnblogs.com/hanfei-1005/p/5707632.html
Copyright © 2011-2022 走看看