标签:访问 功能 默认 变量 title 分配 语句 script 上下
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。
语法形式
awk [options] ‘script‘ var=value file(s) awk [options] -f scriptfile var=value file(s)
常用命令选项
模式可以是以下任意一个:
~
(匹配)和~!
(不匹配)。
操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
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]; } } }‘
标签:访问 功能 默认 变量 title 分配 语句 script 上下
原文地址:https://www.cnblogs.com/zhco/p/9543972.html