`
- 浏览:
43815 次
- 性别:
- 来自:
湖南永州
-
AWK用法
一、知识点一
1、域分割 -F 确定分割符 如果不加-F 默认以空格分割符
cat /etc/passwd | awk -F: '{print $1,$2,$3}'
2、抽取域
cat /etc/passwd | awk -F: '{print $1}'
3、$0代表全局域,也就是所有的记录
cat /etc/passwd | awk -F: '{print $0}'
4、单独打印记录
cat /etc/passwd | awk -F: '{print $1,$4}'
5、打印报告头
# cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}' | more
6、打印信息尾
# cat /etc/passwd | awk -F: 'BEGIN{print "This is system user"}{print $1}
END{print "==================="}'
二、知识点二
awk正则表达式
(1) ~匹配
cat /etc/passwd | awk '{if($0~/root/) print $0}'
(2) 精确匹配
cat /etc/passwd | awk -F: '{if($1~/root/) print $1}'
(3) 不匹配!
cat /etc/passwd | awk '$0 !~/root/'
cat /etc/passwd | awk -F: '{if($1~/root/)print $1}'
(4) 小于
cat /etc/passwd |awk -F: '{if($3<200)print $3}'
(5) 小于或者等于
cat /etc/passwd | awk -F: '{if($3<=200)print $3}'
(6) 大于或者等于
cat /etc/passwd | awk -F: '{if($3>=200)print $3}'
(7) 匹配多个关键字
cat /etc/passwd | awk -F: '$1~/(root|user)/'
(8) 匹配行首
cat /etc/passwd | awk -F: '$1~/^root/'
(9) awk 使用&& ||
条件1为真&&则条件二执行
条件1为真|| 则条件二不执行
cat /etc/passwd | awk -F: '{if($1=="root" && $5=="root")print $0}'
cat /etc/passwd | awk -F: '{if($1=="root" || $1=="sdfsfsdsdsd") print $0}'
awk NF 和NR
NF 浏览记录域的个数
NR 已读的记录数
cat /etc/passwd | awk -F: '{print NF}'
cat /etc/passwd | awk -F: '{print $1,NR}'
cat /etc/passwd | awk -F: '{if(NR<10 && $1~/root/)print $1}'
awk 替换
gsub(r,s)
cat /etc/passwd | awk -F: 'gsub(/root/,"alvinzeng"){print $0}'
本章练习题:
1 awk 默认以什么为分割符?
:默认以空格符为分隔符
2 抽取/etc/passwd 第一个域和第5个域并且统计他们的行号
:cat /etc/passwd | awk -F: 'BEGIN{i=0}{i++}{print i, $1,$5}'
cat -n /etc/passwd | awk -F: '{print $1"=="$5}'
3 抽取第一个域,并且进行root匹配,然后打印出报告头内容为"This is user"
:cat /etc/passwd | awk -F: 'BEGIN{print "This is user:"}{if($1~"root")print $1}'
4 抽取最后一个域,尾部信息用“########”分割
:cat /etc/passwd | awk -F: '{print $NF}END{print "#######"}'
5 请抽取第一个域,请且匹配以user开头的关键字
:cat /etc/passwd | awk -F: '{if($0~"^user")print $1}'
6 匹配全局域带有[0-9]的关键字的域信息
:cat /etc/passwd | awk -F: '{if($0~"[0-9]")print $0}'
7 请打印出来行后大于30 并且匹配第一个域为mysql的信息条目
:cat /etc/passwd | awk -F: 'NR>=30{if($1~"mysql")print $1}'
8 请打印出/etc/passwd 里面最后一个域,并且统计bash有多少个?nologin的有多少个?
:cat /etc/passwd | awk -F"/" '{print $NF}' |grep "nologin" |wc -l
9 请打印出UID小于500 但是大于200的用户信息
:cat /etc/passwd | awk -F: '{if($3<500 && $4>200)print "uid="$3,"gid="$4}'
10 请打印出带DHCP关键子的用户信息,并且告诉用户在那一行?
:cat /etc/passwd | awk -F: 'BEGIN{i=0}{i++}{if($0~"ftp")print "this user at:"i,$0}'
11 请打印出wu开头的用户有几个?
:cat /etc/passwd | awk -F: '{if($1~"^p")print $1}' | wc -l
12 抽取全域匹配home关键字的有多少个用户?他们是否具bash登录权限
:cat /etc/passwd | awk -F"/" '{if($0~"home")print $0}' | awk -F"/" '{if($NF=="nologin")print $1}' | awk -F: '{print $1"--cannot login"}'
13 匹配行号大于30 并且球UID大于50或者小于500的用户信息
:cat /etc/passwd | awk -F: 'NR>30{if($3>50 && $4<500)print "uid="$3,"gid="$4}'
14 匹配系统用户有多少个? 以及程序用户有多少个?
:nologi与login
15 匹配行号小于30的,并且匹配他们的bash的用户有多少个,在输出他们的行号?
:cat /etc/passwd | awk -F:(都差不多,不想写了,自己写写吧)
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本文档详细介绍linux命令,linux工具awk的使用,对初学者非常有帮助,希望读者能从该文档受益。
Linux awk 命令 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 语法 awk [选项参数]...
linux文本处理工具awk命令详解,超详细的讲解awk命令,更多实战案例
AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。需要的朋友可以参考下
sed是一个很好的文件处理工具,本身是一个管道命令,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大 ,本文重点给大家介绍Linux中 sed 和 awk的用法,一起...
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 awk...
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。这篇文章主要介绍了Linux中的awk命令的相关知识,需要的朋友可以参考下
awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。 它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。 awk其实不仅仅...
Linux常用命令以及进阶命令 侵权删 平时的工作中经常碰到很多疑难问题的处理,在解决问题的同时,有一些工具起到了相当大的作用,在此书写下来,一是作为笔记,可以让自己后续忘记了可快速翻阅,二是分享,希望看到...
grep、sed和awk都是文本处理工具。这篇文章主要介绍了正则表达式及Linux三大文本处理工具,需要的朋友可以参考下
目录 历史 前言 I....1. 程序的基本概念 1. 程序和编程语言 2. 自然语言和形式语言 ...3. 在Linux C编程中使用Unicode和UTF-8 B. GNU Free Documentation License Version 1.3, 3 November 2008 参考书目 索引