Linux命令简单操作之awk

awk

命令格式:

    awk ‘BEGIN{commands} pattern {commands} END{commands}’file

工作方式:

    1.执行BEGIN{commands}语句块中语句,可选的语句块

    2.从文件或者stdin中读取一行,然后执行{commands},重复这个过程,直到文件全部被读取完

    3.当读至输入流末尾是,执行END{commands}语句块

特殊变量:

    FILENAME:awk浏览的文件名

    NR:记录数量,执行过程中对应于当前行号

    NF:字段数量,执行过程中对应于当前行的字段数

    FS:设置分隔符,命令行 -F

    $0:执行过程中当前行的文本内容

    $1:第一个字段的文本内容

    $2:第二个字段的文本内容,以此类推

print&printf打印输出的函数

  print的参数是以逗号进行分隔时,参数打印时则以空格作为定界符,awk的print语句中,双引号是被当做拼接操作符使用的  

  printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

流程控制语句

  if(condition)else{}

  while(){}

  do{}while()

  for(;;)等 

内建字符串控制函数:

    1.length(string):返回字符串的长度

    2.index(string,search_string):返回search_string在字符串中出现的位置

    3.substr(string,start_pos,end-pos):在字符串中从start-pos开始到end-pos位置,生成子串

   4.split(string,array,delimiter):用delimiter生成一个字符串列表,并将该列表存入数组,delimiter默认使用当前FS值。

   5.sub(regex,replace_str,string):将正则表达式匹配到的第一处内容替换成replace_str

   6.gsub(regex,replace_str,string):替换正则表达式匹配到所有的内容

   7.match(regex,string):检测正则表达式是否能够匹配字符串

应用:

  1.从文件或者stdin中读取一行,循环执行{commands},直到读完

  echo "aXbX cXdXe a;b;cX d;e" | awk -F"[X|;| ]+" 'BEGIN{print "begin:"} {for(i=1;i<=NF;++i){++S[$i];printf("$%d=%s ",i,$i)}} END {print "end:"; for(i in S) print i, S[i]}'

  2.split函数

原文地址:https://www.cnblogs.com/luyanhong456/p/7663019.html