美文网首页
shell脚本练习-1

shell脚本练习-1

作者: 夕颜00 | 来源:发表于2021-02-23 16:26 被阅读0次

    1、编写shell脚本,计算1~100的和。

    #!/bin/bash
    
    sum=0
    
    for i in `seq 1 100`
    do
       sum=$[$sum+$i]
    done
    
    echo $sum
    

    2、编写shell脚本,输入一个数字n并计算1~n的和。

    #!/bin/bash
    
    read -p "input num:" n
    
    sum=0
    
    for ((i=0;i<=$n;i++))
    do
      sum=`expr $sum + $i`
    done
    
    echo $sum
    

    3、写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数

    #以下5种方法均可
    grep -n "" nowcoder.txt|awk -F: '{print }'|tail -n1| awk -F: '{print $1}'
    awk '{print NR}' nowcoder.txt|tail -n1
    awk 'END{print NR}' nowcoder.txt
    sed -n '$=' nowcoder.txt
    cat nowcoder.txt |wc -l
    

    4、写一个 bash脚本以输出数字 0 到 500 中 7 的倍数(0 7 14 21...)的命令

    for i in {0..500..7}; do
             echo "${i}"
    done
    
    for i in {0..500}
    do
      if [ $[$i%7] == 0 ]
      then
        echo $i
      fi
    done
    

    5、写一个 bash脚本以输出一个文本文件 nowcoder.txt中空行的行号,可能连续,从1开始

    示例:
    假设 nowcoder.txt 内容如下:

    a
    b
     
    c
     
    d
     
    e
     
     
    f
    
    • 参考答案:
    #
    awk '{if($0==" ") {print NR}}' nowcoder.txt
    #
    cat -n nowcoder.txt |awk -F"\t" '$2==" " {print $1}'
    

    6、写一个 bash脚本以去掉一个文本文件 nowcoder.txt中的空行

    sed '/^[[:space:]]*$/d' nowcoder.txt
    #
    sed '/^\s*$/d' nowcoder.txt
    

    7、写一个 bash脚本以统计一个文本文件 nowcoder.txt中字母数小于8的单词。

    示例:
    假设 nowcoder.txt 内容如下:
    how they are implemented and applied in computer

    你的脚本应当输出:
    how
    they
    are
    and
    applied
    in

    说明:
    不要担心你输出的空格以及换行的问题

    • 参考答案:
    #空格也可操作
    for i in `cat nowcoder_word.txt`; do if [[ ${#i} -lt 8 ]]; then echo $i; fi; done
    #wc -L 可统计字符数
    for i in `cat nowcoder_word.txt`; do if [ $(echo $i |wc -L) -lt 8 ]; then echo $i; fi; done
    #awk
    awk 'BEGIN{FS="";RS=" ";ORS="\n"}{if(NF<8)print$0}' nowcoder_word.txt
    

    9、统计所有进程占用内存大小的和

    假设 nowcoder.txt 内容如下:
    root 2 0.0 0.0 0 0 ? S 9月25 0:00 [kthreadd]
    root 4 0.0 0.0 0 0 ? I< 9月25 0:00 [kworker/0:0H]
    web 1638 1.8 1.8 6311352 612400 ? Sl 10月16 21:52 test
    web 1639 2.0 1.8 6311352 612401 ? Sl 10月16 21:52 test
    tangmiao-pc 5336 0.0 1.4 9100240 238544 ?? S 3:09下午 0:31.70 /Applications

    以上内容是通过ps aux | grep -v 'RSS TTY' 命令输出到nowcoder.txt文件下面的
    请你写一个脚本计算一下所有进程占用内存大小的和($6列):

    • 参考答案:
    awk '{(sum=sum+$6)} END{print sum}' nowcoder_9.txt
    

    10、每个单词出现的个数

    写一个 bash脚本以统计一个文本文件 nowcoder.txt 中每个单词出现的个数。

    为了简单起见,你可以假设:
    nowcoder.txt只包括小写字母和空格。
    每个单词只由小写字母组成。
    单词间由一个或多个空格字符分隔。

    示例:
    假设 nowcoder.txt 内容如下:
    welcome nowcoder
    welcome to nowcoder
    nowcoder
    你的脚本应当输出(以词频升序排列):
    to 1
    welcome 2
    nowcoder 3

    说明:
    不要担心个数相同的单词的排序问题,每个单词出现的个数都是唯一的。

    • 参考答案:
    #awk
    awk 'BEGIN{RS=" ";ORS="\n"} {print $0}' nowcoder_10.txt |sort|uniq -c |sort
     #tr
    cat nowcoder_10.txt |tr ' ' '\n'|sort|uniq -c |sort
    #
    

    11、第二列是否有重复

    给定一个 nowcoder.txt文件,其中有3列信息,如下实例,编写一个sheel脚本来检查文件第二列是否有重复,且有几个重复,并提取出重复的行的第二列信息:
    实例:
    20201001 python 99
    20201002 go 80
    20201002 c++ 88
    20201003 php 77
    20201001 go 88
    20201005 shell 89
    20201006 java 70
    20201008 c 100
    20201007 java 88
    20201006 go 97

    结果:
    2 java
    3 go

    • 参考答案:
    #
    cut -d" " -f2 nowcoder_11.txt |sort |uniq -c |awk '{if($1>1) {print $0}}'
    # -cd
    awk '{print $2}' nowcoder.txt | sort | uniq -cd 
    #awk
    awk '{a[$2]++} END{for(i in a) {if(a[i]>=2){print a[i]" "i}}}' nowcoder.txt
    

    12、转置文件的内容

    写一个 bash脚本来转置文本文件nowcoder.txt中的文件内容。

    为了简单起见,你可以假设:
    你可以假设每行列数相同,并且每个字段由空格分隔

    示例:
    假设 nowcoder.txt 内容如下:
    job salary
    c++ 13
    java 14
    php 12

    你的脚本应当输出(以词频升序排列):
    job c++ java php
    salary 13 14 12

    • 参考答案:
    [ttxie@41 test]$ awk '{print $1}' nowcoder_12.txt | xargs
    job c++ java php
    [ttxie@41 test]$ awk '{print $2}' nowcoder_12.txt | xargs
    salary 13 14 12
    
    awk '{
        for (i=1;i<=NF;i++){
            if (NR==1){
                res[i]=$i
            }
            else{
                res[i]=res[i]" "$i
            }
        }
    }END{
        for(j=1;j<=NF;j++){
            print res[j]
        }
    }' nowcoder.txt
    

    13、统计一个文件 数字个数

    写一个 bash脚本以统计一个文本文件 nowcoder.txt中每一行出现的1,2,3,4,5数字个数并且要计算一下整个文档中一共出现了几个1,2,3,4,5数字数字总数。

    示例:
    假设 nowcoder.txt 内容如下:
    a12b8
    10ccc
    2521abc
    9asf
    你的脚本应当输出:
    line1 number: 2
    line2 number: 1
    line3 number: 4
    line4 number: 0
    sum is 7

    说明:
    不要担心你输出的空格以及换行的问题

    • 参考答案:
    i=1
    while read line
    do
            result=`echo $line|grep -o -E "[12345]" |wc -l`
            echo "line$i number:$result"
            let SUM+=result
            let i+=1
    done < "nowcoder.txt"
    echo sum is $SUM
    

    14、去掉所有含有this的句子

    写一个 bash脚本以实现一个需求,去掉输入中含有this的语句,把不含this的语句输出
    示例:
    假设输入如下:
    that is your bag
    is this your bag?
    to the degree or extent indicated.
    there was a court case resulting from this incident
    welcome to nowcoder

    你的脚本获取以上输入应当输出:
    that is your bag
    to the degree or extent indicated.
    welcome to nowcoder

    说明:
    你可以不用在意输出的格式,包括空格和换行

    • 参考答案:
    #
    grep -v "this" nowcoder_14.txt
    #
    awk '$0!~/this/ {print $0}' nowcoder_14.txt
    #
    sed '/this/d' nowcoder_14.txt
    

    15、求平均值

    写一个bash脚本以实现一个需求,求输入的一个的数组的平均值

    第1行为输入的数组长度N
    第2~N行为数组的元素,如以下为:
    数组长度为4,数组元素为1 2 9 8
    示例:
    4
    1
    2
    9
    8

    那么平均值为:5.000(保留小数点后面3位)
    你的脚本获取以上输入应当输出:
    5.000

    • 参考答案:
    #!/bin/bash
    read  cnt
    sum=0
    cnt_cp=0
    while  [ $cnt  -gt 0 ]
    do
        read  num
        let  "sum+=num"
        let  "cnt--"
        let  "cnt_cp++"
    done
    echo  "scale=3;$sum/$cnt_cp"  |bc
    

    16、去掉不需要的单词

    写一个 bash脚本以实现一个需求,去掉输入中的含有B和b的单词
    示例:
    假设输入如下:
    big
    nowcoder
    Betty
    basic
    test

    你的脚本获取以上输入应当输出:
    nowcoder test

    说明:
    你可以不用在意输出的格式,空格和换行都行

    • 参考答案:
    cat nowcoder_16.txt |while read line
    do
        a=`echo $line|grep -o -E "[Bb]" |wc -l`
        if [ $a -eq 0 ];then 
        echo $line
        fi
    done
    
    #
    cat nowcoder_16.txt |grep -v -i b
    #
    awk '$0!~/[Bb]/ {print $0}' nowcoder_16.txt
    #
    
    

    Linux编程_Shell脚本练习题
    牛客网题库

    相关文章

      网友评论

          本文标题:shell脚本练习-1

          本文链接:https://www.haomeiwen.com/subject/bdkfxltx.html