浅谈awk

  • 语法形式
awk [选项] '哪一行{print 哪一列}' [file]
#逻辑:按行取列,先将符合条件的行尽数找出,再对其中的某一列进行选取;
#awk本质上其实是一种编程语言,其中可以进行运算;
  • 选项
-F ""			#指定分隔符;
  • 取行
#当语法形式中的`{print 哪一列}`为空即为取行
1.指定某行或某几行
语法形式:
		awk 'NR[运算符]n' file
使用awk内置变量:
		NR  --> 存储每行的行号
运算符:
		== 等于
		>  大于
		>= 大于等于
		<  小于
		<= 小于等于
		!= 不等于
		&& 且
		|| 或
#可使用内置函数取出文件内容的最后一行
		awk 'END{print}' file
2.模糊过滤取行
语法形式:
		awk '模式' file
模式'可以使用正则符号':
		//		#模糊查找文件中的字符串
		//,//	#模糊查找两字符串之间的内容
  • 字符比对查取行
语法形式:
		awk [选项] '[取列内置变量] [模式匹配符] "[表达式]"' file
模式匹配符:
		==		#某列等于……
		!=		#某列不等于……
		~		#使用正则匹配字符串
		!~		#使用正则匹配字符串并取反
表达式:
		任意字符
		正则表达式
  • 数字比对查取行
语法形式:
		awk [选项] '[取列内置变量] [模式匹配符][运算符]n' file
  • 取列
#当语法形式中的`哪一行`为空即为取列
语法形式:
		awk '{print [内置变量]}' file
awk内置变量:
		$0  	# 表示整行
		$n  	# 表示文件的第n列 
		,   	# 逗号表示空格
		NF  	# 表示每一行最后一列的列号
		$NF		# 表示最后一列;`$(NF-1)`表示倒数倒数第二列 --> 也体现了awk支持运算的特性
  • 指定分隔符取列
语法形式:
		awk -F "[表达式]" '{print [内置变量]}' file
表达式:
		任意字符
		正则表达式
  • 指定分隔符按行取列
awk -F "[表达式]" '取行方式+取列方式' file
  • BEGIN的用法
#BEGIN 是一个特殊的模式,它在处理任何输入行之前执行一次。
awk -F "[表达式]" 'BEGIN{print 任意内容}' file
  • 示例
#过滤文件的选择:/etc/passwd文件的前10行,存储到了~/passwd.txt中
#即:head /etc/passwd >> ~/passwd.txt
#在未明确说明分隔符时,默认指定分隔符为":"
1.指定取行
#取出文件最后一行 
[root@Dezyan ~]# awk 'END{print}' passwd.txt
#取出第7行和第9行以及两行之间的内容
[root@Dezyan ~]# awk 'NR>=7&&NR<=9' passwd.txt

2.模糊取行
#取出文件中以root开头和以adm开头以及两行之间的内容
[root@Dezyan ~]# awk '/^root/,/^adm/' passwd.txt

3.字符比对取行
#取出文件中用户名为root的行
[root@Dezyan ~]# awk -F: '$1=="root"' passwd.txt
#取出文件中以nologin结尾的行
[root@Dezyan ~]# awk -F: '$NF~"nologin$"' passwd.txt

4.数字比对取行
#取出用户uid大于6的行
[root@Dezyan ~]# awk -F: '$3>6' passwd.txt

5.取列
#输出文件每一行最后一列的序号(以:或\或:\为分隔符)
[root@Dezyan ~]# awk -F "[:/]+" '{print NF}' passwd.txt
#输出文件的第一列和最后一列(以:或\或:\为分隔符)
[root@Dezyan ~]# awk -F "[:/]+" '{print $1,$NF}' passwd.txt

6.BEGIN用法示例
#在输出文件第一列内容前,先输出“用户名”
[root@Dezyan ~]# awk -F: 'BEGIN{print "用户名"}{print $1}' passwd.txt
#让输出的第一列内容前,都有“用户名:”几个字
[root@Dezyan ~]# awk -F: '{print "用户名:"  $1}' passwd.txt

7.综合运用
#输出文件最后一行的最后一列
[root@Dezyan ~]# awk -F: 'END{print $NF}' passwd.txt
#输出大于第5行到结尾的内容,并取出第3列
[root@Dezyan ~]# awk -F: 'NR>5{print $3}' passwd.txt
#输出用户uid大于6的行并输出用户名
[root@Dezyan ~]# awk -F: '$3>6{print $1}' passwd.txt
#将系统重不能登录的用户输出到nologin.txt文件中,并在文件的开头显示“不能登录的用户有:”
	##注:使用awk命令;不能使用管道符
[root@Dezyan ~/testdir]# awk -F: 'BEGIN{print "不能登录的用户有:"} $NF~"nologin$"{print $1}' /etc/passwd >> nologin.txt
不能登录的用户有:
bin
daemon
……………………


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值