awk - 数据提取和报告工具 (4) 实战

  • 原创
  • Madman
  • /
  • 2018-04-15 09:12
  • /
  • 0
  • 386 次阅读

awk - 数据提取和报告工具 (4) 实战-min.png

Synopsis: awk通常用作数据提取和报告工具,例如生成格式化报告。awk语言广泛使用字符串数据类型,关联数组(即按键字符串索引的数组)和正则表达式。程序由一系列规则rule组成(程序也可能包含用户自定义的函数), 每个规则指定一个要搜索的模式pattern和匹配到模式后的动作action,模式和动作至少要指定一个。如果省略pattern,则action将应用于每一条记录(通常是每一行);如果省略action,默认是{ print $0 }将当前记录整体打印输出

awk系列:


1. 打印指定列

1. 默认以空白字符为字段的分隔符
# awk '{ print $1 }' /etc/passwd | head -n 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

2. 指定FS
# awk -F: '{ print $1 }' /etc/passwd | head -n 3
root
bin
daemon

2. 格式化输出

1. 添加报告的表头
# awk -F: 'BEGIN { printf "%-20s %-20s \n", "USERNAME", "SHELL" } { printf "%-20s %-20s \n", $1, $NF }' /etc/passwd | head -n 3
USERNAME             SHELL                
root                 /bin/bash            
bin                  /sbin/nologin

3. 过滤记录

通过指定精细的pattern,来过滤指定的记录

1. 当前行包含2个以上字符o,则打印其用户名和默认shell
# awk -F: '$0 ~ /o{2,}/ { printf "%-20s %-20s\n", $1, $NF }' /etc/passwd
root                 /bin/bash           
lp                   /sbin/nologin       
mail                 /sbin/nologin       
operator             /sbin/nologin       
postfix              /sbin/nologin

2. 打印UID大于100的用户名和默认shell
# awk -F: '$3 > 100 { printf "%-20s %-20s\n", $1, $NF }' /etc/passwd
systemd-bus-proxy    /sbin/nologin       
systemd-network      /sbin/nologin       
polkitd              /sbin/nologin       
libstoragemgmt       /sbin/nologin       
abrt                 /sbin/nologin       
chrony               /sbin/nologin

4. 操作变量

1. 让UID大于的100的,都减去10
# awk -F: -v age=10 '$3 > 100 { print "Before: " $3  ", After: " $3- age }' /etc/passwd
Before: 999, After: 989
Before: 192, After: 182
Before: 998, After: 988
Before: 997, After: 987
Before: 173, After: 163
Before: 996, After: 986

2. shell脚本中传变量给awk
the_age=10
awk -F: -v age=${the_age} '$3 > 100 { print "Before: " $3  ", After: " $3- age }' /etc/passwd

3. 传入环境变量
export THE_AGE=10
awk -F: '$3 > 100 { print "Before: " $3  ", After: " $3 - ENVIRON["THE_AGE"] }' /etc/passwd
分类: Linux
标签: awk gawk GNU
未经允许不得转载: LIFE & SHARE - 王颜公子 » awk - 数据提取和报告工具 (4) 实战

分享

作者

作者头像

Madman

如果博文内容有误或其它任何问题,欢迎留言评论,我会尽快回复; 或者通过QQ、微信等联系我

0 条评论

暂时还没有评论.

发表评论前请先登录