Day31-awk求表格指定列最大最小值

    awk、grep和sed可以说是shell语言中文本处理的三剑客,如果能将此三者掌握得炉火纯青,基本上分割生信表格用不上什么脚本,都是一行命令搞定。
    其中尤以awk的用法多样最为突出,可以被当做一种专用的编程语言,内部能够处理循环判断等各种逻辑关系。
    在最近的工作中,我遇到了一些需要统计一个表格某一列最大最小值的情况,之前我只学了如何提取元素,那么怎样用awk去轻松处理这个更复杂的问题呢?


    首先,我们看一组示例数据:

-bash-4.1$ cat test.txt
#Sample Count
A       10
B       20
C       15

    我们想要统计Count这一列的最大值,需要输入如下指令:

grep -v "^#" test.txt | awk 'NR==1{max=$2;next}{max=max>$2?max:$2}END{print max}'

    输出的结果为20,也就是我们想要得到的结果。那么我们分解来看这个指令,前半段grep实际上是输出除去以#为开头的行,也就是我们表格的主体部分。
    管道符右边的awk指令END之前的指令可以分为两个部分来理解:第一部分是NR==1{max=$2;next},这里表示如果行数(NR)为1时,将第二列的值赋给max,是if判断的简便写法;第二部分是{max=max>$2?max:$2},这里指如果行数(NR)不为1,那么判断max是否大于此时第二列的值,如果是(?max就维持原值,如果不是(:)就令max赋上第二列的值。最后,输出max也就是所有第二列值中最大的那一个。
    怎么样,这样分解来看,是不是原本像乱码的awk代码就变得容易理解了呢?其实就是awk中判断语句的灵活运用。
    那么同理,最小值可以用以下指令来求:

grep -v "^#" test.txt | awk 'NR==1{min=$2;next}{min=min<$2?min:$2}END{print min}'

    目前关于awk的使用我也在学习当中,希望能够更加纯熟地掌握,以后就可以适当“偷懒”啦~!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Linux指令中文说明传送入口 整理自Linux指令中文说明 文本和数据进行处理的编程语言awk 是一种编程语言,...
    释闲人阅读 2,145评论 1 6
  • netstat -tnlp|egrep -i "$1"|awk {'print $7'}|awk -F'/' '{...
    JerichoYu阅读 1,022评论 0 0
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,588评论 0 4
  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,254评论 2 25
  • 一. AWK 说明 awk的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并...
    西华子阅读 946评论 0 4