AWK
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWK相关的知识,希望对你有一定的参考价值。
概念:
工作原理
- 扫描文件从第一行到最后一行 进行处理文件
- 使用一行作为输入,并将这一行赋值给内部变量$0
- 然后,行被 " : " (默认为空格或制表符)分解成字段或域,每个字段存储在已编号的变量中,从$1开始编号
- 内部变量"FS"来确定字段分割符
- AWK打印字段时,print函数打印,awk在打印的字段之间加上空格,因为
$1,$3
之间有一个逗号,逗号被定为输出字段分割符OFS - awk输出之后,将从文件中获取另一行,将其存储在$0中,覆盖原来的内容
AWK的命令格式
-
默认情况下是空格和(tab)进行分割
-
awk的两种形式的语法格式
-
awk [options] ‘commands‘ filename
-
options
- -F 指定分隔符,默认的分隔符是空格或者制表符(tab)
-
command
- BEGIN{} {} END{}
- 行处理前(读文件之前) 行处理 行处理后
-
Example:
- 这个例子的意思是在读取config文件之前打印了1/2,然后每读取文件一行打印一个OK,文件读取完成后打印“---------”
awk ‘BEGIN{print 1/2} {print "ok"} END{print "endfile"}‘ /etc/selinux/config 0.5 ok ok ok ok ok endfile
-
-F ":" 实际含义就是 这里FS指定了冒号和 awk ‘BEGIN{FS=":"} {print $1,$2}‘ /etc/passwd root x bin x daemon x adm x lp x sync x shutdown x OFS指定了输出的方式 awk ‘BEGIN{FS=":";OFS="---"} {print $1,$2}‘ /etc/passwd root---x bin---x daemon---x adm---x lp---x
-
AWK的命令格式:
-
awk ‘pattern‘ (模式,正则表达式的模式)filename
awk ‘/root/‘ /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
pattern 模式 指的是正则表达式
-
awk ‘{action}‘ filename
awk -F: ‘{print $1}‘ /etc/passwd
-
awk ‘pattern {action}‘ filename
awk -F ":" ‘/root/{print $1,$3}‘ /etc/passwd root 0 operator 11 awk ‘BEGIN{FS=":"} /root/{print $1,$3}‘ /etc/passwd root 0 operator 11
AWK的内部变量
-
$0 记录文本的内容
-
NR 返回屏幕文本所有内容的行号
-
FNR
awk -F: ‘{print FNR,$0}‘ /etc/passwd
-
NF 指的行字段的数字
$NF 指的是最后一个字段
-
FS 输入字段分割符,默认为空格
-
OFS 输出字段分隔符
-
RS
awk -F: ‘BEGIN{RS=""} {print $0}‘ filename
-
ORS
区别:
? 字段分隔符: FS OFS 默认空格或制表符
? 记录分隔符:RS ORS 默认换行符
以上是关于AWK的主要内容,如果未能解决你的问题,请参考以下文章