awk学习手记-1

4 篇文章 0 订阅

awk学习手记-1

awk学习网址推荐:http://www.zsythink.net/archives/tag/awk/
AWK的学习有助于提升工作效率,现在抽时间总结一下,AWK的基础使用方法。

实际上,awk是一门编程语言,他支持条件判断,数组,循环操作等功能,我们一般把awk当作脚本语言解释器。

grep 、 sed 、 awk 被人们称为Linux三剑客。简单总结下各位特长:

grep:擅长单纯的文本查找和匹配

sed:擅长编辑匹配到的文本。

awk:擅长按照需求格式化文本。

sed 和 awk 也都有文本查找和匹配功能,不然不可能进行编辑和格式化。

一、AWK官方
awk是一个报告生成器,它拥有强大的文本格式化能力。

解释:报告可以理解成表格,awk善于将文本整理成表格的样式然后再展示出来。

二、awk基础

awk基础语法:awk [options] 'program' file1,file2...
将上述语法中的program进行细化,可以得到awk扩展语法:

awk [options] 'Pattern {Action}'file

awk语法中action指的就是动作,awk格式化文本并将其输出。

从最简单的案例开始认识awk,直接指定action。

例一、

[root@my127 awk]# cat 3.txt 
Hello World!
[root@my127 awk]# awk '{print}' 3.txt 
Hello World!

可以看到awk执行了打印动作,同cat命令。

例二、

[root@my127 awk]# cat 4.txt 
root test prom tmp 
123  456  78900  00
WWW  GOO  GLE  COM
[root@my127 awk]# cat 4.txt | awk '{print $4}'
tmp
00
COM
[root@my127 awk]# awk '{print $4}' 4.txt 
tmp
00
COM

观察上面的用例,发现:
1、awk可以自己操作文本,也可以通过管道进行操作;
2、print $4 打印了4.txt中的第四列,实际上观察文件中4,5两列空格数并不一致,但是因为不指认分隔符,awk就默认多个空格等同于成一个空格,仅作为一个分隔符。

awk是逐行处理文本数据的,遇到‘回车换行’就会认为当前行结束,新开一行;
此外,awk在用户没有设置分隔符时,默认使用空格作为字段分隔符。
简单说就是: 回车分隔行,空格分割字符。
在这里插入图片描述
$0:表示整行
$n:表示第n列
$NF:表示最后一列

awk ‘{print }’ file 与awk ‘{print $0}’ file是一样的

注:NF代表列总数,$ NF代表最后一列内容
例如一行文本被分割成7段,NF值为7;
$ NF值为文本的第七列,与此同理,倒数第二列可以表示为$(NF-1)。

例三、
我们可以使用$n一次输出多个指定的列,如下图所示:

[root@my127 awk]# cat 4.txt 
root test prom tmp 
123  456  78900  00
WWW  GOO  GLE  COM
[root@my127 awk]# awk '{print $1,$3}' 4.txt 
root prom
123 78900
WWW GLE

如果希望指定的列连接在一起,即没有空格分割,则不适用逗号分开$n

[root@my127 awk]# awk '{print $1$3}' 4.txt 
rootprom
12378900
WWWGLE

例五、
除了输出文本内容以外,我们还可以添加自定义字段,将自定义字段和文本中原有列进行结合后输出。

[root@my127 awk]# awk '{print "demo",$1,$2,"string"}' 4.txt 
demo root test string
demo 123 456 string
demo WWW GOO string

只有字符串使用" “包裹,
变量一定不要加” ",否则会被识别成文本输出。

[root@my127 awk]# awk '{print "demo",$1,"$2","string"}' 4.txt 
demo root $2 string
demo 123 $2 string
demo WWW $2 string

三、模式

刚才我们通过几个小例子认识了awk中最常用的Action:print
现在我们来认识一下模式,也就是Pattern,Pattern中最容易理解的就是BEGIN和END

BEGIN:指定了文本处理之前需要执行的操作;
END:指定了文本处理完之后需要执行的操作。

例六、
[root@my127 awk]# awk ‘BEGIN{print “abc”,“def”} {print $0}’ 4.txt
abc def
root test prom tmp
123 456 78900 00
WWW GOO GLE COM

实例发现BEGIN操作在文本操作之前被执行,实际上即使不指定文本,awk也会执行BEGIN操作。

例子七、

[root@my127 awk]# awk 'BEGIN{print "aaa","bbb"}'
aaa bbb

同理,END模式就是在处理完所有的指定文本后,再执行指定的动作。

可以结合BEGIN和END一起看一下效果:

例子八、

[root@my127 awk]# awk 'BEGIN{print "qqq","www"} {print $0} END{print "zzz" , "xxx"}' 4.txt 
qqq www
root test prom tmp 
123  456  78900  00
WWW  GOO  GLE  COM
zzz xxx

以上例子表明了AWK的将文本格式化成表格的能力,有表头,表内容,表尾。

例子九、

[root@my127 awk]# awk 'BEGIN{print "this is header!"} {print $0} END{print "this is tail!"}' 4.txt 
this is header!
root test prom tmp 
123  456  78900  00
WWW  GOO  GLE  COM
this is tail!

第一篇手记主要讲述awk基本语法及原理,留作自己的笔记。

*****介绍几个较为常用的awk内置变量

内置变量NR+NF
NR表示行数,NF表示列数。

[root@my127 awk]# cat 4.txt 
root test prom tmp
123  456  78900  00
WWW  GOO  GLE  COM
[root@my127 awk]# awk '{print NR,NF}' 4.txt 
1 4
2 4
3 4
[root@my127 awk]# awk '{print NR,$0}' 4.txt 
1 root test prom tmp
2 123  456  78900  00
3 WWW  GOO  GLE  COM

现在每一行开头都标有行号。

内置变量FNR

当awk处理多文件时,分别对各个文件行号计数。

[root@my127 awk]# awk '{print FNR,$0}' 4.txt 5.txt 
1 root test prom tmp
2 123  456  78900  00
3 WWW  GOO  GLE  COM
1 qaz wsx#edc rfv
2 123 456#789 098
3 tgb yhn#ujm iko
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值