zoukankan      html  css  js  c++  java
  • Linux三剑客之——awk用法入门

      【本文是通过学习http://www.zsythink.net/中awk相关的入门文章后个人进行练习、尝试后的一些总结。博文对本人学习awk帮助很大,在此表示感谢。】

      awk的主要功能:文本格式化。按行处理,每次遇到回车,即认为一行结束。

      awk的格式:awk [option] '[pattern]{action}' file1[,file2[,file3[,...filen]]]

      

      示例中使用的test.txt文件的内容如下:

      aaa:bbb ccc:ddd

      eee:fff ggg:hhh iii:jjj

      示例中使用的test文件的内容如下:

      123 456 789

      ABC DEF

      举例正式开始:

      1. awk ‘{print $2}’ test.txt

      输出结果:

      ccc:ddd

      ggg:hhh

      【注】

       1)默认以空格为分隔符,将每行的内容分隔成段,第一段的内容赋值给变量$1,(注意,变量不能使用引号引起来,否则变量会被当做字符串处理)。

       2)操作(option)——print $2,需要用'{}'引起来

      2. awk '{print $1,$2}' test.txt

       输出结果:因为用了逗号(,),所以结果中会用默认的输出间隔符(空格)将$1和$2的内容隔开

        aaa:bbb ccc:ddd

        eee:fff ggg:hhh

       awk '{print $1 $2}' test.txt或

       awk '{print $1$2}' test.txt

       输出结果:$1和$2之间没有逗号,输出的结果会将$1和$2的内容直接连接,没有任何分隔符。

        aaa:bbbccc:ddd

        eee:fffggg:hhh

     

      3. awk -F: '{print $2}' test.txt或

       awk -v FS=':' '{print $2}' test.txt

       输出结果:

       bbb ccc

       fff ggg

      【注】-F:用来指定输入分隔符(-F)为“:”

         当命令中需要用到内置变量(variable)时,需要在变量(FS)的前面加上-v选项。

      4.awk -v OFS='***' '{print $1,$2}' test.txt

       输出结果:

       aaa:bbb***ccc:ddd

       eee:fff***ggg:hhh

      【注】内置变量OFS重新指定输出内容的列分隔符(示例中将输出分隔符设置为***),使得输出的结果,将$1和$2用“***”进行分隔。

         $1和$2之间必须使用逗号分隔,否则命令中指定的输出分隔符不会生效。

      5.awk '{print NR,NF}' test.txt

       输出结果:

       1 2

       2 3

        【注】输出每行的行号(NR)和每行的列数(NF)

      6.awk '{print NR,$0}' test.txt test

       输出结果:将2个文件的内容按照顺序依次给每行进行编号。

       1 aaa:bbb ccc:ddd

       2 eee:fff ggg:hhh iii:jjj

          3 123 456 789

          4 ABC DEF

      7.awk '{print FNR,$0}' test.txt test

       输出结果:给2个文件的内容各自给每行进行编号。

       1 aaa:bbb ccc:ddd

       2 eee:fff ggg:hhh iii:jjj

          1 123 456 789

          2 ABC DEF

      8.awk '{print FILENAME,FNR,$0}' test.txt test

       输出结果:

       test.txt 1 aaa:bbb ccc:ddd

       test.txt 2 eee:fff ggg:hhh iii:jjj

          test 1 123 456 789

          test 2 ABC DEF

        【注】FILENAME变量中存储了当前处理的文件的文件名

      8.awk -v RS=' ' '{print NR,$0}' test.txt

       输出结果:

       1 aaa:bbb

       2 ccc:ddd

       eee:fff

       3 ggg:hhh

       4 iii:jjj

      【注】RS=' '将换行符指定为空格(默认的行分隔符是“回车符”)。请注意输出结果中的第2行内容中是包含回车的。

         如果test.txt中有连续2个空格,则第二个空格仍被识别为一个行分隔符,会打印出一个空行。

      8.awk -v ORS='***' '{print NR,$0}' test.txt

       输出结果:

       1 aaa:bbb ccc:ddd***2 eee:fff ggg:hhh iii:jjj

       【注】ORS变量重新指定输出内容的行分隔符(示例中指定为“***”。不指定时,默认值是回车)。

    【中间小结】注意区分FS、RS、OFS、ORS

       9.awk 'BEGIN{print ARGV[0],ARGV[1],ARGV[2],ARGC}' test.txt test

       输出结果:

       awk test.txt test 3

        【注】ARGV是一个数组,存储了命令行中的所有参数,下标以0开始,ARGV[0]固定存储"awk"。

           ARGC存储命令行中的参数数量。

      10.awk -v var1="qqq" -v var2="ppp" 'BEGIN{print var1,var2}' test.txt或

        awk 'BEGIN{var1="qqq";var2="ppp";print var1,var2}' test.txt

       输出结果:

       qqq ppp

        【注】如果要引用shell中其他地方已定义的变量,则必须使用第一种格式,即:

          >>num=3

          >>awk -v var=$num 'BEGIN{print var}' test.txt

     暂时先总结这些,awk还有很多需要学习的,后续继续补充吧。

  • 相关阅读:
    Ubuntu 14.04上架IPSec+L2TP的方法
    Windows Server 2008 R2 FTP无法从外部访问的解决方法
    在Windows Server 2008 R2上打开ping的方法
    全站导航
    拉勾网招聘信息分析
    pandas之DataFrame
    pandas之Series
    matplolib学习
    numpy学习
    scrapy框架【爬虫的暂停和启动】
  • 原文地址:https://www.cnblogs.com/jona-test/p/10022278.html
Copyright © 2011-2022 走看看