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还有很多需要学习的,后续继续补充吧。

转载于:https://www.cnblogs.com/jona-test/p/10022278.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值