您现在的位置: 万盛学电脑网 >> 操作系统 >> Linux教程 >> 正文

Linux如何使用文本处理工具awk

作者:佚名    责任编辑:admin    更新时间:2022-06-22

  awk是Linux中的文本处理工具,类似于shell编程语言,拥有属于自己的语言,下面小编就给大家介绍下Linux中awk文本处理工具的用法,感兴趣的朋友可以来了解一下。

 Linux如何使用文本处理工具awk
 

  调用方式

  1.命令行

  awk [-F field-separator] ‘commands’ input-file(s)

  commands是真正awk命令,[-F域分隔符]是可选的。input-file(s) 是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格(或者tab)。

  2.shell脚本方式

  将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh 可以换成:#!/bin/awk -f

  3.将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

  内置变量

  ARGC:命令行参数个数

  ARGV:命令行参数排列

  ENVIRON:UNIX环境变量

  ERRNO:UNIX系统错误消息

  FILENAME:awk浏览的文件名

  OFMT:数字的输出格式 %.6g

  FNR:浏览文件的记录数

  FS:设置输入域分隔符,等价于命令行 -F选项

  NF:浏览记录的域的个数

  NR:已读的记录数,就是行号,从1开始

  FNR:当前记录数

  OFS:输出域分隔符

  ORS:输出记录分隔符

  RS:控制记录分隔符

  $0:当前记录(作为单个变量)

  $1~$n:当前记录的第n个字段,字段间由FS分隔

  输出函数

  print:参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已

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

  %d 十进制有符号整数

  %u 十进制无符号整数

  %f 浮点数

  %s 字符串

  %c 单个字符

  %p 指针的值

  %e 指数形式的浮点数

  %x %X 无符号以十六进制表示的整数

  %o 无符号以八进制表示的整数

  %g 自动选择合适的表示法

  获取外部变量

  1.获取普通外部变量

  awk ‘{action}’ 变量名=变量值

  2.BEGIN程序块中变量

  awk –v 变量名=变量值 [–v 变量2=值2 …] ‘BEGIN{action}’

  3.环境变量

  需要用到内置变量ENVIRON实现

上一页123456下一页共6页

  运算符

  1.赋值运算符

  = += -= *= /= %= ^= **=

  2.逻辑运算符

  ||:逻辑或

  &&:逻辑与

  3.正则运算符

  ~:匹配正则表达式

  ~!:不匹配正则表达式

  4.关系运算符

  《 《= 》 》= != ==

  5.算术运算符

  + - * / & ++ --

  6.其它运算符

  $:字段引用

  空格:字符串连接符

  ?:C条件表达式

  in:数组中是否存在某键值

  字符操作

  1.字符串转数字

  将变量通过”+”连接运算。自动强制将字符串转为整型。非数字变成0,发现第一个非数字字符,后面自动忽略

  2.数字转字符串

  只需要将变量与””符号连接起来运算即可

  3.字符串连接

  只需要将变量与””符号连接起来运算即可

  数组操作

  在awk中数组叫做关联数组,因为下标既可以是数也可以是串。awk中的数组不必提前声明,也不必声明大小。数组元素用0或空串来初始化,这根据上下文而定。需要注意的是不同版本下面函数不一定相同。其相关的函数有length、asort、delete、split。当然也可以实现多维数组。

  流程控制语句

  1.条件判断语句(if)

  if(表达式){语句1}else{语句2}

  if(表达式){语句1}else if(表达式){语句2}else{语句3}

  2.循环语句(while、for、do while)

  while(表达式){语句}

  for(变量 in 数组){语句}

  for(变量;条件;表达式){语句}

  do{语句}while(条件)

  3.关键字

  break:当break语句用于while或for语句时,导致退出程序循环。

  continue:当continue语句用于while或for语句时,使程序循环移动到下一个迭代。

  next:能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。

  exit:语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。

  正则表达式

  +:包含一个或多个字符或扩展正则表达式的具体值(在 +(加号)前)在这个字符串中,则字符串匹配。命令行:awk ’/smith+ern/‘ testfile

  ?:包含零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。命令行:awk ’/smith?/‘ testfile

  |:以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。命令行:awk ’/allen | alan /‘ testfile

  ():在正则表达式中将字符串组合在一起。命令行:awk ’/a(ll)?/‘ testfile

  {m}:有m个模式的具体值位于字符串中,则字符串匹配。命令行:awk ’/l{2}/‘ testfile

  {m,}:至少m个模式的具体值在字符串中,则字符串匹配。命令行:awk ’/t{2,}/‘ testfile

  {m, n}:在m和n之间(包含的m和n)个模式的具体值在字符串中(其中m 《= n),则字符串匹配。命令行:awk ’/er{1, 2}/‘ testfile

  [String]:正则表达式与方括号内String变量指定的任何字符匹配。命令行:awk ’/sm[a-h]/‘ testfile

  [^ String]:在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符不匹配。这样,命令行:awk ’/sm[^a-h]/‘ testfile

  ~,!~:表示指定变量与正则表达式匹配或不匹配的条件语句。命令行:awk ’$1 ~ /n/‘ testfile

  ^:指定字段或记录的开头。命令行:awk ’$2 ~ /^h/‘ testfile

  $:指定字段或记录的末尾。命令行:awk ’$2 ~ /y$/‘ testfile

  。:表示除了在空白末尾的终端换行字符以外的任何一个字符。命令行:awk ’/a..e/‘ testfile

  \ :转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。例如,命令行:/a\/\//

上一页12 3456下一页共6页

  内置函数

  1.算术函数

  atan2( y, x ) 返回 y/x 的反正切。

  cos( x ) 返回 x 的余弦;x 是弧度。

  sin( x ) 返回 x 的正弦;x 是弧度。

  exp( x ) 返回 x 幂函数。

  log( x ) 返回 x 的自然对数。

  sqrt( x ) 返回 x 平方根。

  int( x ) 返回 x 的截断至整数的值。

  rand( ) 返回任意数字 n,其中 0 《= n 《 1。

  srand( [Expr] ) 将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。

  2.字符串函数

  gsub( Ere, Repl, [ In ] ) 除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行,。

  sub( Ere, Repl, [ In ] ) 用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的