[shell练习]——awk练习题

1. sed和awk有什么区别?

(1)awk:按列(域)操作;sed:按行操作
(2)awk:文本处理语言,适合对文本进行抽取处理;sed:非交互式的编辑器,适合对文本进行编辑

2. awk要处理域的时候,以哪个参数作为分割参数?

-F

3. 请打印出/etc/passwd 第一个域,并且在第一个域所有的内容前面加上“用户帐号:”
# cat /etc/passwd |awk -F: ‘{print"用户帐号:"$1}‘

4. 请打印出/etc/passwd 第三个域和第四个域
# awk -F: ‘{print $3"\t"$4}‘ /etc/passwd

5. 匹配/etc/passwd 第三域大于100的显示出完整信息
# cat /etc/passwd |awk -F: ‘{if($3>100) print$0}‘

6. 请打印第一域,并且打印头部信息为:这个是系统用户,打印尾部信息为:"================"
# cat /etc/passwd |awk -F: ‘BEGIN{print "这个是系统用户"} {print $1} END{print "================"}‘

7. 打印行号小于15的,并且最后一域匹配bash的信息.
# cat /etc/passwd |awk -F: ‘{if($NR<15 && $NF~/bash/) print$0}‘

8. 请打印出第一域匹配daemon的信息.
# cat /etc/passwd |awk -F: ‘$1=="daemon"‘

10. 请打印出第三域数字之和
# cat /etc/passwd |awk -F: ‘{sum=sum+$3}END{print sum}‘
# cat /etc/passwd |awk -F: ‘{sum=sum+$3};END{print sum}‘

11. 请将/etc/passwd 中的root替换成gongda,记住是临时替换输出屏幕看到效果即可.
# cat /etc/passwd |awk -F: ‘gsub(/root/,"gongda") {print $0}‘

12. 请匹配passwd最后一段域bash结尾的信息,有多少条
# awk -F: ‘($NF~/bash/){print NR}‘ /etc/passwd |wc -l
# cat /etc/passwd |awk -F: ‘{if($NF~/bash/) print$0}‘|wc -l

13. 请同时匹配passwd文件中,带mail和bash的关键字的信息
# cat /etc/passwd |awk -F: ‘$0~/root|mail/‘
# awk -F: ‘{if($0~/mail/ || $0~/bash/) print $0}‘ /etc/passwd

14. 请匹配passwd第三域总大于500的相关信息.
# cat /etc/passwd |awk -F: ‘{if($3>500) print $0}‘

15.编写文件file的内容如下:
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan Dalsass:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175
Jody Savage:[206] 548-1278:15:188:150
Guy Quigley:[916] 343-6410:250:100:175
Dan Savage:[406] 298-7744:450:300:275
Nancy McNeil:[206] 548-1278:250:80:75
John Goldenrod:[916] 348-4278:250:100:175
Chet Main:[510] 548-5258:50:95:135
Tom Savage:[408] 926-3456:250:168:200
Elizabeth Stachelin:[916] 440-1763:175:75:300
其中:
Mike Harrington 名字
[510] 548-1278  电话
250:100:175     过去三个月里的捐款

(1)显示所有电话号码
# awk -F: ‘{print $2}‘ file

(2)显示Dan的电话号码
# awk -F: ‘{if($1~/Dan/) print$2}‘ file

(3)显示Susan的名字和电话号码
# awk -F: ‘{if($1~/Susan/) print$1,$2}‘ file

(4)显示所有以D开头的姓
# awk -F: ‘{if($1~/^D/) print$1}‘ file

(5)显示所有以一个C或E开头的名
# awk -F: ‘{if($1~/^[C|E]/) print$1}‘ file

(6)显示所有只有四个字符的名,这里可以使用length函数,举例: length($1)==10 $1字符为10
# cat file |awk -F: ‘{print$1}‘|awk ‘{if(length($1)==4) print $1}‘

(7)显示所有区号为916的人名
# cat file |awk ‘{print$2}‘|awk -F: ‘{if($2~/916/) print$1}‘

(8)显示Mike的捐款.显示每个值时都有以$开头.如$250$100$175
# cat file |awk -F: ‘{if($1~/Mike/) print "$"$3"$"$4"$"$5}‘

(9)显示姓,其后跟一个逗号和名
# cat file |awk -F: ‘{print$1}‘|awk ‘{print$2","$1}‘

时间: 2024-10-07 02:01:28

[shell练习]——awk练习题的相关文章

AWK文本处理增强shell功能--AWK完全手册

AWK是一种优良的文本处理工具.它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一. 本文主要摘录池中龙写的Unixawk使用手册(第二版),对其中内容稍微改动.感谢作者的分享. 目 录 1 0作者的话 2 1awk的调用方式 3 2awk的语法 4 3awk的记录.字段与内置变量 5 4awk的内置函数 5 5在命令行使用awk 6 6awk的变量 7 7运算与判断 7 8awk的流程控制 8 8.1BEGIN和END: 8 8.2流程控制语句 9 8.2.1if...e

Linux Shell学习--awk命令详解

(1).awk介绍 awk是由Alfred Aho .Peter Weinberger 和 Brian Kernighan于1977年开发的变成语言,awk是上述三位创建者姓的首字母. Awk的基本语法与c语言类似,如果对c语言很熟悉,那么学习awk编程也将事半功倍. Awk功能与sed相似,都是用来进行文本处理的,awk语言可以从文件或字符串中基于指定规则浏览和抽取信息,在抽取信息的基础上,才能进行其他文本操作.   awk是一款设计用于数据流的工具.它颇有玩头的原因就在于可以对列和行进行操作

Shell、Awk 中自动隐式类型转换的“坑”

1.问题: 在林林总总的编程语言里,弱类型的语言着实不少,一方面这种"动态类型"用起来很方便,而另一方面则"坑"你没商量~ 常见的 SQL.Shell.Awk 都会遇到各种暗藏的"隐式类型转换",下面就列举一些 shell.awk 里的自动隐式类型转换 case,防止掉坑. 注意 shell.awk 的变量为空 字符串.变量为空 未定义.初始值的隐式转换问题: # shell 下的字典排序比较 [email protected] 10:59:23

AWK增强的文本处理shell特征--AWK完全手册

AWK这是一个很好的文字处理工具. 它不仅 Linux 中也是不论什么环境中现有的功能最强大的数据处理引擎之中的一个. 本文主要摘录池中龙写的Unixawk使用手冊(第二版),对当中内容略微修改.感谢作者的分享. 目 录 1 0作者的话 2 1awk的调用方式 3 2awk的语法 4 3awk的记录.字段与内置变量 5 4awk的内置函数 5 5在命令行使用awk 6 6awk的变量 7 7运算与推断 7 8awk的流程控制 8 8.1BEGIN和END: 8 8.2流程控制语句 9 8.2.1

[shell]grep sed awk 练习题

下面是简单学习之后做得练习题,如果有不对的,请交流啊. Grep 练习 文件名grepfile Steve Blenheim:238-923-7366:95 Latham Lane, Easton, PA 83755:11/12/56:20300 Betty Boop:245-836-8357:635 Cutesy Lane, Hollywood, CA 91464:6/23/23:14500 Igor Chevsky:385-375-8395:3567 Populus Place, Caldw

shell之awk

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行各种分析处理. 使用方法: awk [option] 'pattern1{action1}pattern2{action2}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令. awk

shell编程脚本练习题

1.使用for循环在/oldboy目录下通过随机小写10个字母加固定字符串oldboy批量创建10个html文件,名称例如为: [[email protected] oldboy]# sh /server/scripts/oldboy.sh [[email protected] oldboy]# ls coaolvajcq_oldboy.html  qnvuxvicni_oldboy.html  vioesjmcbu_oldboy.html gmkhrancxh_oldboy.html  tmd

SHELL SED AWK 语法

原文地址:http://blog.chinaunix.net/uid-15811445-id-176318.html Shell shell 测试表达式 -a file 检查文件是否存在(与-e同) -b file 检查文件是否为特殊块设备 -c file 检查文件是否为特殊字符设备 -d fil 检查文件是否为目录 -e file 检查文件是否存在(与-a同) -g file 检查文件属性位set- group-id是否置1 -h file 检查文件是否为符号链接(与-L 同) -k file

shell 之awk 关联数组高级应用

最近由于数据迁移过,有些用户信息需要再次确认下,也许数据量比较大,但是需要最终确认的比如说是用户ID和其对应的用户积分数,这样就会导致出现文本a(老的数据),文本b(新的数据).比如 1101 123 1102 111 1103 145 1104 152 这是文本a.txt 文本b.txt如下 1101 123 1102 112 1103 154 1104 152 列举的文本例子只是为了说明使用方法列举的最简单的文本,实际数据可能要复杂的多,可能会出现b.txt 中出现的ID在a.txt中没有出