awk 字段处理
基本用法:
$ awk '条件动作1{动作1} 条件动作2{动作2} ...' filename
概述:
**1. awk为行处理字段,默认字段分割为空格 或 [tab] **
**2. { } 表示动作(command),条件类型置于 { } 外,最后用单引号 ' ' 括住 **
**3. 当条件类型为if语句时,要置入{ }动作内 **
**4. awk所有动作中,{ }中,若有多个辅助命令,可用;或Enter隔开 **
**5. awk可接受前个 command 的 standardoutput **
I.变量
变量名称 | 代表意义 |
---|---|
NF | 每一行拥有的字段总数 |
NR | 目前awk处理是第几行 |
FS | 目前的分割字符,默认是空格 |
$0 | 一整行数据 |
$1 | 第一个字段(第一列) |
$2 | 第二个字段(第二列) |
$ last -n 5 | awk '{print $1 "\t lines: " NR "\t columes: " NF}'
# awk中变量需要大写,非变量部分需要用双引号
II.条件类型
** 逻辑运算符(<;>;<=;>=;==;!=)**
$ cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t " $3}'
$ cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "\t " $3}'
# 关键字BEGIN预先设置awk变量,否则{FS=":"}在第二行才能生效
# 此处可看作两个条件类型及两个动作
III.高级操作(条件及循环计算)
pay.txt文件内容
Name | 1st | 2st |
---|---|---|
VBrid | 230 | 330 |
DMwR | 450 | 679 |
test | 230 | 112 |
计算每行的加总并显示 |
$ cat pay.txt | \
awk 'NR==1{printf "%8s %8s %8s %8s\n",$1,$2,$3,"Total"}
NR>=2{total = $2 + $3
printf "%8s %8s %8s %8.2f\n",$1,$2,$3,"Total"}'
$ cat pay.txt | \
awk '{if (NR==1) printf "%8s %8s %8s %8s\n",$1,$2,$3,"Total"}
NR>=2{total = $2 + $3
printf "%8s %8s %8s %8.2f\n",$1,$2,$3,"Total"}'
# 两句内容一样;条件类型可用if语句写入到'{}'动作中
# printf 用法详见prinf说明
# %s;%i;%f分别表示字符串,整数,浮点数,其中浮点数的.占一位数
awk所有动作中,{ }中,若有多个辅助命令,可用;或Enter隔开
循环计算待更新
本文为《鸟哥的linux私房菜基础篇第三版》第12章部分学习笔记