码迷,mamicode.com
首页 > 其他好文 > 详细

awk

时间:2018-08-27 21:23:03      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:访问   功能   默认   变量   title   分配   语句   script   上下   

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。

 

语法形式

awk [options] ‘script‘ var=value file(s)
awk [options] -f scriptfile var=value file(s)


常用命令选项

  • -F fs   fs指定输入分隔符,fs可以是字符串或正则表达式,如-F:
  • -v var=value   赋值一个用户定义变量,将外部变量传递给awk
  • -f scripfile  从脚本文件中读取awk命令
  • -m[fr] val   对val值设置内在限制,-mf选项限制分配给val的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

模式

模式可以是以下任意一个:

  • /正则表达式/:使用通配符的扩展集。
  • 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
  • 模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
  • BEGIN语句块、pattern语句块、END语句块:

 

操作

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:

1.变量和数组

  预定义变量

  说明:[A]=awk。

$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。 
$0 这个变量包含执行过程中当前行的文本内容。
[A] FILENAME 当前输入文件的名。
[A] FS 字段分隔符(默认是任何空格)。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。

将外部变量传给awk

  借助-v选项,可以将外部值(并非来自stdin)传递给awk:VAR=10000

 echo | awk -v VARIABLE=$VAR ‘{ print VARIABLE }‘



数组
数组是awk的灵魂,处理文本中最不能少的就是它的数组处理。
因为数组索引(下标)可以是数字和字符串在awk中数组叫做关联数组(associative arrays)。
awk 中的数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化,这根据上下文而定。

Array[1]="sun"
Array["birth"]="1987"
使用中print Array[1]会打印出sun;使用print["birth"]会得到1987。


数组长度
awk ‘BEGIN{info="it is a test";lens=split(info,tA," ");print length(tA),lens;}‘
4 4

asort对数组进行排序,返回数组长度。

if(key in array)通过这种方法判断数组中是否包含key键值。

delete array[key]可以删除,对应数组key的,序列值。


二维/多维数组

awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。

awk提供了逻辑上模拟二维数组的访问方式。

例如,array[2,4]=1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP(?34)作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2?344。

类似一维数组的成员测试,多维数组可以使用if ( (i,j) in array)这样的语法,但是下标必须放置在圆括号中。类似一维数组的循环访问,多维数组使用for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。

awk ‘BEGIN{
for(i=1;i<=9;i++){
  for(j=1;j<=9;j++){
    tarr[i,j]=i*j; print i,"*",j,"=",tarr[i,j];
  }
}
}‘




 
 

awk

标签:访问   功能   默认   变量   title   分配   语句   script   上下   

原文地址:https://www.cnblogs.com/zhco/p/9543972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!