Loading

总结下awk基本用法

命令格式:
awk '{commands}  [{other commands}]'
awk 'condition{commands}  [{other commands}]'  如:awk '$4=="gold"{print $0}' xxx.txt  ——  打印第四列为gold的行

{$0 $1 $2 ...}: $0表示整行,$1表示第一列,$2表示第二列…… 

NR: number of record,{print $NR, $0}可以给行加上行号
NF: number of fields,每个记录的列数(默认空格分割计数)

打印第7行:	awk 'NR==7{print $0}' test.txt
打印有10列的行:	awk 'NF==10{print $0}' test.txt
打印最后一列: 	awk '{print $NF}' xxx
打印倒数第二列:	awk '{print $(NF-1)}' xxx

{print $1, $2} 中的逗号表示使用默认输出分隔符连接1,2列并打印。(默认是空格)
{print $1$2} 和 {print $1 $2} 等效,第1,2列直接连接,中间没有分隔符。(即输出语句的空格表示直接连接)


定义变量:
awk 'BEGIN{在这里定义} {后续命令}'
内建变量:
FS:输入分隔符
OFS:输出分隔符 (O,不是零)

自定义输入分隔符使用逗号:
awk 'BEGIN{FS=","} {print $1, $2}' test.txt
自定义输出分隔符使用逗号:
awk 'BEGIN{FS=","; OFS=","} {print $1, $2}'

算术运算、

字符串和数字自动转换、

字符串和数字运算时自动parse开头的数字


使用正则

awk '/正则式/{命令}' xxx
awk '/abc/{print $0}' xxx  	打印包含abc的行

正则式简介:
1. /abc/ 包含abc
2. /^abc$/ 匹配开头和结束
3.  . 任意字符或空格
4. 转义 \. \? \/
5. 中括号
	[xyz] 匹配xyz中的任意一个字符
	[a-z] 匹配a-z范围内任意字符
	[a-zA-Z]
	[^a-z] ^放在中括号中表示不匹配,如 /a[^a-z]c/ 可以匹配 aBc,不能匹配abc
6. 数量:
	* 0次或若干次
	+ 1次或若干次
	? 0次或1次
	{a,b} 指定出现a~b次数,如{3}表示出现3次,{4,9} 表示可以出现4,5,6,7,8,9次
7. () 匹配的单位,如 /(ab){3}/ 要求包含ababab
posted @ 2019-08-12 02:37  dylanchu  阅读(411)  评论(0编辑  收藏  举报