zoukankan      html  css  js  c++  java
  • awk从放弃到入门(1):awk基础

    一、awk简介

      awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

      awk 是一种很棒的语言,它适合文本处理和报表生成,其语法较为常见,借鉴了某些语言的一些精华,如 语言等。在 linux 系统日常处理工作中,发挥很重要的作用,掌握了 awk将会使你的工作变的高大上。 awk 是三剑客的老大,利剑出鞘,必会不同凡响。

      Linux三剑客:

    (1)grep:适合单纯的查找和匹配文本。

    (2)sed:适合编辑匹配到的文本。

    (3)awk:适合格式化文本,对文本进行较复杂的格式处理。

    二、awk基础:action

      <语法>

      awk [options] 'program' file1 , file2 , ```

      awk [options] 'Pattern{Action}' file

      2.1通过Action了解awk:

    <例子1>awk最常用的就是print和printf功能,例子中使用awk打印功能,将test_awk.txt文件中的内容打印出来。

    <例子2>实际场景来使用awk功能。上图中的awk '{print $1}',表示输出df的信息的第1列,$1表示将当前行按照分隔符分割后的第1列,不指定分隔符时,默认使用空格作为分隔符,细心的你一定发现了,上述信息用的空格不止有一个,而是有连续多个空格,awk自动将连续的空格理解为一个分割符了。

    $0 表示显示整行 ,$NF表示当前行分割后的最后一列($0和$NF均为内置变量)注意,$NF 和 NF 要表达的意思是不一样的,对于awk来说,$NF表示最后一个字段,NF表示当前行被分隔符切开以后,一共有几个字段。也就是说,假如一行文本被空格分成了7段,那么NF的值就是7,$NF的值就是$7,  而$7表示当前行的第7个字段,也就是最后一列,那么每行的倒数第二列可以写为$(NF-1)。

    <例子2-1>awk '{print $1,$2}' test_awk.txt  #打印test_awk.txt文件中第1列和第2列的内容。

    <例子2-2>awk '{print $NF}' test_awk.txt  #表示将文本中最后一列打印出来

     <例子2-3>awk '{print $(NF-1)}' test_awk.txt  #表示将文本中倒数第二列的内容打印出来

    <例子2-4>awk '{print $0}' test_awk.txt=awk '{print}' test_awk.txt  #表示将文本中的所有内容打印出来

    <例子3>可以自己添加字段,并与文件中的内容拼接

     awk '{print $1,$2,"string"}' test_awk.txt

     awk '{print $1,$2,666}' test_awk.txt

     awk '{print "diyilie",$1} {print "dierlie",$2}' test_awk.txt

    三、awk基础:pattern

      AWK 包含两种特殊的模式:BEGIN 和 END。

      (1)BEGIN 模式:指定了处理文本之前需要执行的操作

      (2)END 模式:指定了处理完所有行之后所需要执行的操作

      3.1BEGIN 模式案例

    awk 'BEGIN{print "bg_name","bg_gender"} {print $1,$2}' test_awk.txt  #表示在执行打印第1列和第2列的动作前先执行BEGIN中的打印动作

      3.2END模式案例

    awk '{print $1,$2} END{print "end_name","end_gender"}' test_awk.txt  #表示在执行打印第1列和第2列的动作后再执行END中的打印动作

    【参考大佬:http://www.zsythink.net/archives/1336】

  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/python-wen/p/10776401.html
Copyright © 2011-2022 走看看