Lniux学-AWK使用
Posted chenri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lniux学-AWK使用相关的知识,希望对你有一定的参考价值。
AWK
AWK 与 sed 的区别
- AWK用于比较规范的文本处理,用于统计数量并输出指定字段
- sed 用于将不规范的文本,处理为比较规范的文本
AWK的字段引用和分离
- AWK也是按行读取,每行称作记录,使用空格、制表符分隔开的单词称作字段,可以自己指定分隔符来隔开字段。
- 使用$1 $2 ... $n 表示每一个字段,$0 表示一整行
- awk ‘{print $1,$2,$3}‘ filename
- awk -F "‘" ‘/^menu/{ print $2 }‘ /boot/grub2/grub.cfg 以‘号进行分割字段,取出文件中的内核信息
- { print x++,$2 } x++ 可以显示行数
- -F 选项用于指定分隔符
- awk -F ‘,‘ ‘{print $1,$2,$3}‘ filename
- 分隔符可以使用正则表达式表示
AWK的表达式
- 系统变量
-
FS 和 OFS 字段分隔符,OFS 表示输出的字段分隔符
- head -5 /etc/passwd | awk ‘BEGIN{FS=":"}{ print $1 }‘
BEGING,在读入文件之前,进行预处理。在读入passwd文件之前,就通过FS选项指定好了以“:”作为分隔符。 - head -5 /etc/passwd | awk ‘BEGIN{FS=":";OFS="-"}{ print $1,$2 }‘ OFS="-",OFS是在查找到字段后,系统是默认使用空格进行隔开,而OFS改变了默认隔开的符号。
- head -5 /etc/passwd | awk ‘BEGIN{FS=":"}{ print $1 }‘
-
RS 行记录分隔符,记录行,RS 默认就是一个换行符,在多行合并成单行时,使用RS进行处理
- head -5 /etc/passwd | awk ‘BEGIN{RS=":"}{ print $1 }‘ 系统默认的行记录分隔符是换行符,RS=":",把行记录分隔符换成:
-
NR 和 FNR 行数
- head -5 /etc/passwd | awk ‘{ print NR,$0 }‘ NR显示行号,$0显示行内容
- awk ‘{ print NR,$0 }‘ /etc/hosts /etc/hosts
- awk ‘{ print FNR,$0 }‘ /etc/hosts /etc/hosts
对单个文件,使用NR和FNR没什么区别,若是接多个文件,NR会按顺序对内容一直排序,不区分文件;FNR是以先文件进行区分,再各自进行排序。
-
NF 字段数量,最后一个字段内容可以用 $NF 取出
- head -5 /etc/passwd | awk ‘BEGIN{FS=":"}{ print NF }‘ 输出每一行中有多少个字段
-
以上是关于Lniux学-AWK使用的主要内容,如果未能解决你的问题,请参考以下文章