zoukankan      html  css  js  c++  java
  • 牛客网Shell编程练习

    最近因为工作原因开始接触Linux,需要做一些简单的Shell开发。

    在牛客网练习了一下,来记录自己的学习过程。

    第1题:统计文件的行数

    题目:

    写一个 bash脚本以输出一个文本文件 nowcoder.txt中的行数
    示例:
    假设 nowcoder.txt 内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <iostream>
    using namespace std;
    int main()
    {
        int a = 10;
        int b = 100;
        cout << "a + b:" << a + b << endl;
        return 0;
    }

    你的脚本应当输出:
    9

    思路:

    思路较简单。

    程序:

    wc -l
    

     第2题:打印文件的最后5行

    题目:

     经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowcoder.txt中的最后5行
    示例:
    假设 nowcoder.txt 内容如下:

     你的脚本应当输出:

    思路:

    思路较简单。

    程序:

    tail -5 nowcoder.txt
    

     第3题:输出7的倍数

    题目:

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

    思路:

    类似其他语言,构造一个循环。

    程序:

    for i in {0..500..7}
    do
        echo $i
    done
    

     第4题:输出第5行的内容

    题目:

    写一个 bash脚本以输出一个文本文件 nowcoder.txt 中第5行的内容。



    示例:
    假设 nowcoder.txt 内容如下:
    welcome
    to
    nowcoder
    this
    is
    shell
    code

    你的脚本应当输出:
    is

    思路:

    使用NR和$0

    程序:

    awk '{if (NR == 5) print $0}' nowcoder.txt
    

     第5题:打印空行的行号

    题目:

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a
    b
     
    c
     
    d
     
    e
     
     
    f




    你的脚本应当输出:
    3
    5
    7
    9
    10

    思路:

    使用^$

    程序:

    awk '/^$/ {print NR}' nowcoder.txt
    

     第6题:去掉空行

    题目:

    写一个 bash脚本以去掉一个文本文件 nowcoder.txt中的空行
    示例:
    假设 nowcoder.txt 内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    abc
     
    567
     
     
    aaa
    bbb
     
     
     
    ccc


    你的脚本应当输出:
    abc
    567
    aaa
    bbb
    ccc

    思路:

    两个思路,一个使用sed来,一个使用awk来。

    程序1:

    sed '/^$/d' nowcoder.txt
    

     程序2:

    awk '{if (length($1) >= 1) print $0}'
    

     第7题:打印字母数小于8的单词

    题目:

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



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

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

    and
    applied

    in

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

    思路:

    使用awk中NF来确定字段数,并且使用判断条件来进行判断。

    程序:

    awk '{for(i=1;i<=NF;i++) if(length($i)<8) print $i}' nowcoder.txt
    

     第8题:统计所有进程占用内存大小的和

    题目:

    假设 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文件下面的
    请你写一个脚本计算一下所有进程占用内存大小的和:

    思路:

    使用累计的思想。

    程序:

    awk 'BEGIN{sum=0} {sum=sum+$6} END{print sum}' nowcoder.txt
    

     第9题:去掉包含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


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

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

    思路:

    使用grep

    程序:

    grep -v this nowcoder.txt
    

     第10题:求平均值

    题目:

    写一个 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


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

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

    思路:

    使用NR找行,然后根据不同的情况来统计和计算数字。

    程序:

    awk '
    BEGIN{sum=0}
    {if(NR==1) {num=$0} else {sum=sum+$0}}
    END{printf("%.3f",sum/num)}'
    

     第11题:去掉不需要的单词

    题目:

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


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

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

    思路:

    使用grep

    程序:

    grep -v 'B|b' 
    

     第12题:转置文件的内容

    题目:

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

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

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

    你的脚本应当输出(以词频升序排列):
    job c++ java php
    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题:第二列是否有重复

    题目:

    给定一个 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

    思路:

    使用uniq -c来统计信息。

    程序:

    awk '{print $2}' nowcoder.txt | sort| uniq -c| sort| grep -v '1'
    

     第14题:统计每个单词出现的个数

    题目:

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

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

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

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

    思路:

    使用sort -k来指定列进行排序。

    程序:

    awk '{
    for (i=1;i<=NF;i++)
    {
        a[$i]++
    }}
    END{
        for(j in a)
        {
            print j,a[j]
        }
    }' nowcoder.txt |sort -k 2
    

     今天的学习就到这里,那个原第12题有些难度,明天来研究。

    怀挺~~~

    第15题:打印每一行出现的数字个数

    题目:

    写一个 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

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

    思路:

    看了别人的思路,用循环来做。

    程序:

    awk '{
    count=0;
    len=length($0);
    for(i=1;i<=len;i++)
        {s=substr($0,i,1)
        if(0<s && s<6)
            {total++;
            count++}}; 
            printf("line%d number:%d
    ",NR,count);}
    END{printf("sum is %d
    ",total)}'
    
  • 相关阅读:
    Struts2中的类型转换失败
    使用 paramsPrepareParamsStack 拦截器栈后的运行流程
    Action请求流程分析
    Struts2的默认拦截器执行顺序
    网络通信的整个流程
    路由和交换机工作原理
    网络编程之socket
    关于socket的setsockopt的使用
    socket工作原理深入分析
    网络通信协议(互联网协议)
  • 原文地址:https://www.cnblogs.com/zhuozige/p/14050529.html
Copyright © 2011-2022 走看看