zoukankan      html  css  js  c++  java
  • nowcoder-shell篇(grep、awk、sed为主)

    统计文件行数

    # 统计文件行数
    cat nowcoder.txt | wc -l

    打印文件最后5行

    tail -n -5 nowcoder.txt
    #以下一样,展示文件最后5行:
    tail -n 5 nowcoder.txt
    tail -n5 nowcoder.txt
    tail -5 nowcoder.txt                 #不写默认10行
    #展示从第5行开始到文件末尾
    tail -n +5 nowcoder.txt
    #展示文件最后10个字符
    tail -c -10 nowcoder.txt
    #动态显示文件最后10行,直至CTRL+C结束,常用看日志增长
    tail -f logs.txt

    输出7的倍数

            ——shell生成list、array的方法参考:https://www.jb51.net/article/69168.htm

    for i in {0..500..7}    #shell生成list的方法
    do
        echo $i
    done
    
    #补充错误做法,待排查
    #if条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]
    a=0
    while(( $a < 500 ))   #写方括号不行,换成圆括号可以AC,不知道原因
    do
    echo $a
    a=$(( $a + 7 ))
    done

    输出文档第五行的内容

    awk参考awk菜鸟教程; awk详细教程

    sed参考sed菜鸟教程

    cat nowcoder.txt | head -5 | tail -1
    # 用awk,NR是内建变量。用法:1.awk [pattern] filename; 2.awk -f awk_code filename
    awk "NR==5" nowcoder.txt
    # 用sed: sed -n 'm,np' filename   查看m-n行;p指print,d指delete
    sed -n '5p' nowcoder.txt

    打印空行行号

    # awk '{[pattern] action}' {filenames};正则表达式要加在两条正斜杠
    awk '/^$/ {print NR}' nowcoder.txt
    #sed  =是指打印行号?
    sed -n '/^$/ =' nowcoder.txt
    # grep运行不成功
    grep -n '^$' nowcoder.txt

    删除空行

    # grep:这里grep为什么可以运行成功?
    grep -v '^$' nowcoder.txt
    # sed:这里如果写sed -n '/^$/d' nowcoder.txt会报错,去掉n可以AC
    sed '/^$/d' nowcoder.txt
    # awk  
    awk '/./ {print}' nowcoder.txt
    awk '{if(( $0 != "" )) print}' nowcoder.txt

    打印字母数小于8的单词

    # $i表示第i列,$0表示整行,不要加引号;NF表共有多少列
    awk '{for(i=1;i<=NF;i++)if( length($i) < 8 ) print $i}' nowcoder.txt

     统计所有进程占用内存大小

    先用ps aux | grep -v 'RSS TTY' 命令输出到nowcoder.txt
    # 注意熟悉awk的语法,这里print $sum会报错
    awk 'BEGIN{sum=0};{sum+=$6};END{print sum}' nowcoder.txt

    统计每个单词出现的次数**

    # 先用tr把每个单词处理为一列,即除了单词都处理为换行,s表示遇到连续的只处理一次;再用uniq统计出现次数,uniq处理前要求单词按字母排序,再根据单词出现次数排序,此时为n,word,再用awk调换一下顺序
    cat nowcoder.txt |tr -cs [a-z] "
    " |sort|uniq -c|sort|awk '{print $2,$1}'
    # 这种解法没懂,没看出来排序的操作在哪
    awk '{for(i=1;i<=NF;i++)a[$i]++}END {for (i in a){print i,a[i]}}'

    检查文件第二列是否有重复,并提取出重复信息

    # awk有点类C写法
    awk '{a[$2]+=1};END{for (i in a){if (a[i] > 1) print a[i],i}}' nowcoder.txt

    转置文件内容

    # 如果是第一行,转置后直接就是每一列的第一个元素;否则,将其拼接在每个arr[i]列,注意shell的字符串拼接不用写+号
    #!/bin/bash
    awk '{for (i=1;i<=NF;i++){
          if (NR == 1)
            arr[i]=$i
          else
            arr[i]=arr[i]" "$i
            }};END{
        for(i=1;i<=NF;i++){
          print arr[i]
          }
        }' nowcoder.txt

     每一行出现的数字个数

    awk 'BEGIN{sum=0};
       {count=0;
        len=length($0);
        for (i=1;i<=len;i++){
          s=substr($0,i,1)     #拆出每一位,判断是否为数字1-5
          if(0<s && s<6){
            sum+=1;
            count+=1
          }
        }printf("line%d number:%d
    ",NR,count);
        };END{
        printf("sum is %d
    ",sum)
        }' nowcoder.txt

    去掉文档所有包含this的句子**

    # grep
    grep -v 'this' nowcoder.txt
    # sed: d表删除
    sed '/this/d' nowcoder.txt
    # awk: shell的字符串包含可以用~
    awk '$0 !~ /this/ {print $0}' nowcoder.txt

    求输入数组的平均值,第一行是数组元素个数,结果保留三位小数

    awk '{if (NR == 1){
        total=$1}
        else{
        a+=$1
        }};END{printf("%.3f",a/total)
    }'

    去掉不需要的单词(包含B与b)

    # grep
    grep -v 'B' | grep -v 'b'
    grep -v '[Bb]'
    # sed
    sed '/[Bb]/d'
    # awk
    awk '$0 !~ /[Bb]/ {print $0}'   #注意正则的写法
  • 相关阅读:
    通过实例来分析I2C基本通信协议
    POJ 1470 Closest Common Ancestors【近期公共祖先LCA】
    并发 错误 java.lang.IllegalMonitorStateException: current thread not owner 分析
    【Nginx】HTTP请求的11个处理阶段
    JavaScript获取当前值
    air游戏接入小米支付sdk
    [学习笔记]Pollard-Rho
    2018-2-13-win10-UWP-Markdown-含源代码
    2018-2-13-win10-UWP-Markdown-含源代码
    2018-2-13-win10-uwp-图标制作器
  • 原文地址:https://www.cnblogs.com/foolangirl/p/14186355.html
Copyright © 2011-2022 走看看