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内置函数和变量图表: