AWK

AWK

格式:awk [options] ‘pattern{action}’ file

逐行处理,默认以“换行符”为标记识别每一行,以用户指定的“分隔符”将行分割成字段,字段按照顺序,分别对应到awk的内置变量中($1,$2,$3…),默认“分隔符”为空格,$0 表示整行

内置变量:
	FS:输入字段分隔符,默认为空白字符
	OFS:输出字段分隔符,默认为空白字符
	RS:输入记录分隔符(输入换行符),指定输入时的换行符
	ORS:输出记录分隔符(输出换行符),输出时用指定符号代替换行符
	NF:当前行的字段的个数(即当前行被分割成了几列),字段数量
	NR:行号,当前处理的文本行的行号
	FNR:各文件分别计数的行号
	FILENAME:当前文件名
	ARGC:命令行参数的个数
	ARGV:数组,保存的是命令行所给定的各参数
	
	自定义变量:1、[option]位置 -v var=value  2、{action}位置 { var1 = value1;var2=value2;print.....}
Action:
a、print 和 printf:printf动作与printf命令的区别:
	1、printf动作与需要格式化输出的文本字段之间需要用“,”隔开,printf命令不需要;
	2、printf命令只有一个“格式替换符”时,格式化输出的多个文本字段可以重复匹配使用这个“格式替换符”,printf动作需要相应个数的“格式替换符”
b、awk [option] '{if (条件1){动作1}elif(条件2){动作2}else{动作3}}'  file
c、awk  'BEGIN{for(i=1;i<=6;i++){print i}}'
d、awk -v i=1 'BEGIN{while(i<=5){print i ; i++}}'  
	或 awk 'BEGIN{i=1;while(i<=5){print i; i++}}' 
	或 awk BEGIN{i=1;do{print i; i++}while(i<=5)}'
e、continue、break、next、exit
Pattern
1、空模式
2、关系运算符模式: <,>,<=,>=,==,!=,~pattern(匹配正则为真),!~pattern(不匹配正则为真)
3、BEGIN/END模式
4、正则模式: awk '/正则表达式/{Action}' file
5、行范围模式:awk '/正则1/,/正则2/{Action}' file

ps: 
	1、Program中使用的是扩展正则表达式;
	2、当使用{x,y}这种次数匹配的正则表达式时,需要配合--posix选项或者--re-interval选项
数组:
awk中数组的下标默认从1开始
awk中允许数组的值为空,在引用了数组中一个不存在的元素后,数组会自动创建一个该元素,并将其赋值为空。
判断数组是否有某个下标的元素存在与否时,不应该用vars[N]=="",而应该用if(N in vars){action}else{action}这种方法
数组的下标不仅可以为“数字”,也可以为任意“字符串”
awk '{for(i=1;i<=NF;i++) {count[$i]++}}END{for(j in count){print j,count[j]}}' test
内置函数:
算数函数:rand、srand、int
	  awk 'BEGIN{srand();print int(rand()*1000)}'
字符串函数:
	sub("查找字符","替换为字符","字段")
	gsub,
	length("字段"),
	index("字符","字段")
	split("字符串","数组","分隔符") 		(split函数有返回值,值就是数组长度)
其他函数:
	asort(数组,\新数组)(不添加新数组的方式对asort函数对数组排序后,数组下标会被重置为数字,从1开始)
	asorti(数组,新数组)(对数组下标进行排序,生成一个下标组成的新数组)

三元运算符:
	判断条件?Action1:action2
打印奇数行:
	awk i=!i file
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值