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章部分学习笔记

posted @ 2018-01-27 13:09  Footprints_in_Words  阅读(199)  评论(0编辑  收藏  举报