shell awk专题笔记

来源:互联网 发布:淘宝密令红包不中 编辑:程序博客网 时间:2024/06/12 17:26

awk是一个非常非常强大的文本编辑工具:可以抽取:行、列、指定字符串、批量修改指定字符串等等几乎一切其他工具能做的事情,awk都能够做,awk还有内置函数,内置变量,这些都能够非常方便的对文本进行抽取和编辑。

首先大概介绍一下awk,awk把文本按照指定的域分隔符把文本分成n个域,语法是:awk -F "域分隔符" file,默认分隔符是空格键;然后每个域都用一个名字$n,n取自然数,当n=0的时候,代表整个文档。

另外有几个比较重要的awk内置变量,NF,NR,FILENAME,NF代表域的总数,NR代表第几行,FILENAME是当前文件名。

还有几个有用的函数,在此只讲解一下gsub(t,s)函数。

好,下面通过一段文本实例操作一下。

用ls -l获取到的一段文本

现在对该段文本进行一定的操作:

1,打印出NF,NR获知文本的基本 信息,执行命令:


可知,文本一共有7行,共有8个域,其中第一行只有2个域。


2,抽取列:抽取第8列,命令:awk '{print $8}'

3,抽取第6行:其实不是后抽取第六行,而是抽取匹配第8列的woman字符串的行:


那么,现在抽取匹配正则表达式/man/的所有行:


4,抽取指定字符串:

比如抽取第8列里面的精确匹配man字符串,这里直接精确匹配man字符串:

记住是用双等号“==”,表示精确匹配的意思。

这里要顺便说明一下grep的精确匹配:


grep非精确匹配:


抽取第8列里面非精确匹配man字符串,这里使用了正则表达式:


5,批量修改指定字符串,把第8列中包含man字符串的元素替换成MAN:


6,使用awk内置函数,把第8列中的man字符串替换成MAN,注意和第5点的区别噢:


该例调用了awk内置函数gsub(r,s),匹配正则表达式~/man/



下面附上awk内置函数和变量图表:



原创粉丝点击