• Shell简易学习练习


    1.Linux Shell入门

    Quiz 1 一个接受命令行参数的shell脚本

    任务 编写一个shell脚本1.sh,这个脚本接受一个命令行参数,并把这个参数打印两次到标准输出。 如果输入没有参数输入或者有多于一个参数输入,输出"error"。

    if [ $# != 1 ] ; then
    	echo "error"
    else
    	echo $1$1
    fi

    Quiz 2 生成时间相关文件夹


    任务 编写一个shell脚本2.sh,无论脚本在任何位置用绝对路径执行都能完成这样的任务,在脚本2.sh所在目录新建一个空文件tmp_YYYYMMDD YYYYMMDD为当前日期

    a=`date +%Y%m%d`
    b="tmp_"$a
    touch $b


    2.学习Grep

    题目
    你需要用grep脚本(或者用grep和其他shell命令配合)实现如下一些功能
    任务

    Quiz 1 

    请完成脚本1.sh,统计文件中的空行个数并输出
    数据 1.dat

    grep -c "^$" 1.dat


    Quiz 2

    任务 请完成脚本2.sh,统计文件中不包含".txt"的行的行数并输出
    数据 2.dat

    grep -c -v "[.]txt" 2.dat


    Quiz 3

    任务 请完成脚本3.sh,求两个文件的差集(3a.txt-3b.txt)并排序输出到标准io中

    数据 3a.dat,3b.dat

    grep -F -v -f 3a.dat 3b.dat | sort | uniq
    grep -F -v -f 3b.dat 3a.dat | sort | uniq

    Quiz 4
    任务 在log文件中,有表示各轮迭代模型性能的报告(如下所示),

    Total:      P=0.97198463(7841/8067) R=0.97914585(7841/8008) F=0.97555210
    请将他们提取出来,并以如下格式输出。
    P=0.97 R=0.98 F=0.98

    for LINE in `grep "^* Total:" 4.dat`
    do
    	if [[ $LINE == "P="* ]];then 
    	p=${LINE:0:6}
    fi
    	if [[ $LINE == "R="* ]];then 
    	r=${LINE:0:6}
    fi
    	if [[ $LINE == "F="* ]];then 
    	f=${LINE:0:6}
    fi
    	# the new line parameter is -e,the other is -n
    	if [[ $p == "P="* ]] && [[ $r == "R="* ]] && [[ $f == "F="* ]];then 
    	echo -n $p
    	echo -n "  "
    	echo -n $r
    	echo -n "  "
    	echo -n $f
    	echo ""
    	p=""
    	r=""
    	f=""
    fi
    done


    3.学习Awk

    Quiz1:输出一个文件所有的偶数行,数据1.dat

    awk 'NR%2==0' 1.dat

    Quiz2: 对于一个保存单词 频率的文件,要同时计算它的累积频率,并将它填在第三列。 举例如下,输入文件是

    the 100
    i 50
    is 45
    ...


    输出文件是:

    the 100 100
    i 50 150
    is 45 195
    ...
    i=1
    THIRD=0
    for ID in $(cat 2.dat)
    do
    	NUM=$i
    	FIRST=$(awk 'NR=='$NUM' {print $1}' 2.dat)
    	SECOND=$(awk 'NR=='$NUM' {print $2}' 2.dat)
    	THIRD=$((THIRD+SECOND))
    	echo -n $FIRST
    	echo -n "  "
    	echo -n $SECOND
    	echo -n "  "
    	echo -n $THIRD
    	echo ""
    	i=$((i+1))
    done

    Quiz3:读入一个包含词性的文件,从中提取出原始句子。 输入文件格式:

    石家庄_ns 空气_n 污染_vn 排_v 第一_m
    潘石屹_ns 遭遇_v 被_p 代言_n
    ...

    输出文件:

    石家庄空气污染排第一
    潘石屹遭遇被代言
    ...
    sed 's/[ _a-zA-Z ]//g' 3.dat


    4.学习Sed

    Quize 1
    任务 去掉文件中的空行
    数据1.dat

    sed '/^$/d' 1.dat


    Quiz 2
    任务某个文件包含三列,第三列是文本,但是文本被'扩了起来,请用提取出这一列并去掉开头和结尾的'符号。
    数据2.dat

    sed "s/.*[ 	]{1,}'//;s/'//" 2.dat

    Quiz 3 Sed批量去拓展名

    请用sed和for配合,将文件名的后缀.raw去掉

    #delete file's extension
    for file in `ls`; do mv $file `echo $file | sed 's/.raw$//'`; done
    #add file's extension
    #for file in `ls`; do mv $file `echo $file | sed 's/$/.raw//'`; done


    5.Sort

    Question:
    Find out the most frequency 100 queries from the query log 有用户日志文件,每行记录了一个用户查询串,长度为1-255字节,共1千万行,请排出查询最多的前100条。

    #!/bin/bash
    file=query_log.txt
    line=100
    cat $file|  
    tr -cs  "
    " |  
        tr A-Z a-z |  
            sort |  
                uniq -c |  
                    sort -k1nr -k2 |  
                        head -n$line



  • 相关阅读:
    单播、广播和多播IP地址
    nagios安装部署及详细配置说明(转)
    centos6.5下cacti部署说明
    HAproxy配置详解
    mysql全量和增量备份详解(带脚本)
    lvs原理及安装部署详解(参考)
    curl命令的用法
    mysql日志解析
    MySQL查看和修改表的存储引擎
    mysql备份和还原
  • 原文地址:https://www.cnblogs.com/pangblog/p/3301518.html
Copyright © 2020-2023  润新知