一、基本用法
awk在shell里面基本都会用到,我们先了解一下awk的基本用法,如下
# 格式
$ awk 动作 文件名
示例1:
$ awk ‘{print $0}’ demo.txt
分析:demo.txt是awk所要处理的文本文件;'{print $0}'
表示要执行的动作,也就是打印demo.txt的每一行,因为print是打印命令,$0代表当前行。因此上面命令的执行结果,就是把每一行原样打印出来。
示例2:
$ echo 'this is a test' | awk '{print $0}'
结果如下
this is a test
示例3:
$ echo 'this is a test' | awk '{print $2}'
结果如下:
is
分析示例2和示例3,可以看出来$0、$1、$2、$3可以表示不同的内容,那是因为awk会根据空格和制表符,将每一行分成若干字段,依次用$1、$2、$3代表第一个字段、第二个字段、第三个字段等等,而$0代表当前行。
awk支持的变量
上面我们了解了$ + 数字
表示某个字段,awk还提供其他一些变量,比如下面的变量
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段
$0 这个变量包含执行过程中当前行的文本内容
NF 表示字段数,在执行过程中对应于当前的字段数,$NF就代表最后一个字段,$(NF-1)代表倒数第二个字段
NR 表示记录数,在执行过程中对应于当前的行号
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。
示例
$ echo 'this is a test' | awk '{print $NF}'
结果如下:
test
分析:变量NF表示当前行有多少个字段,因此$NF就代表最后一个字段。所以输出test
awk支持的函数
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。
示例
$ awk -F ':' '{ print toupper($1) }' demo.txt
ROOT
其中demo.txt的内容如下
root:x:0:0:root:/root:/usr/bin/zsh