SHELL 之 文本三剑客 -- awk

[root@wan day8]# awk '{print}' passwd

-- hello world输出
[root@wan day8]# awk 'BEGIN {print "hello world"}'

-- 输出指定的列
[root@wan day8]# awk -F: '{print $1,$2,$3}' passwd | head -3

-- 换行输出内容
[root@wan day8]# awk 'BEGIN {print "zhang\nwan\nqiang"}'

-- 格式化输出(左对齐)
[root@wan day8]# awk -F: '{printf "user_name:%-10s user_id:%i\n",$1,$3}' /etc/passwd | head -5

-- 格式化输出重定向
[root@wan day8]# awk -F: '{printf "user_name:%-10s user_id:%i\n",$1,$3 > "/tmp/user.txt"}' /etc/passwd

-- 内置变量指定输入分隔符
[root@wan day8]# awk 'BEGIN {FS=":"}{print $1,$3}' /etc/passwd

-- 内置变量指定输出分隔符
[root@wan day8]# awk 'BEGIN {FS=":"}{OFS="//"}{print $1,$3}' /etc/passwd

-- 统计命令处理的记录数(多个文件连续统计)
[root@wan day8]# awk '{print NR}' url.txt wan.txt

-- 统计命令处理的记录数(多个文件单独统计)
[root@wan day8]# awk '{print FNR}' url.txt wan.txt

-- 输出文件行的记录个数
[root@wan day8]# awk '{print NF}' test.txt

-- 输出文件行最后一个记录
[root@wan day8]# awk '{print $NF}' test.txt

-- 输出系统环境变量
[root@wan day8]# awk 'BEGIN {print ENVIRON["PATH"]}'
[root@wan day8]# awk 'BEGIN {print ENVIRON["USER"]}'

-- 定义的变量
[root@wan day8]# awk 'BEGIN {test="hello world";print test}'

-- 定义的变量
[root@wan day8]# awk -v test='hello world' 'BEGIN {print test}'

-- 算数运算
[root@wan day8]# awk 'BEGIN {x=10;y=20;print x*y,x/y,x+y,x-y,x**y,x%y,x^y}'

-- 字符串拼接
[root@wan day8]# awk 'BEGIN {print "I","am","a","stuent"}'

-- 赋值运算
[root@wan day8]# awk 'BEGIN {x=10;y=20;print x++,y--,++x,--y}'

-- 比较运算符
[root@wan day8]# awk -F: '$3>100 {print $1,$3}' /etc/passwd

-- 正则匹配
[root@wan day8]# awk -F: '$0~"^root" {print}' /etc/passwd

-- 逻辑与关系
[root@wan day8]# awk -F: '$3>100 && $4>100 {print $1,$2,$3}' /etc/passwd

-- 逻辑或关系
[root@wan day8]# awk -F: '$3>100 || $4>100 {print $1,$2,$3}' /etc/passwd

-- 匹配以“roo”开始的行
[root@wan day8]# awk '/^root/' passwd

-- 匹配以“roo”开始的行
[root@wan day8]# awk -F: '$1~/^root/' passwd
root:x:0:0:root:/root:/bin/bash
[root@wan day8]# awk -F: '$1~"^root"' passwd
root:x:0:0:root:/root:/bin/bash
[root@wan day8]# awk -F: '$0~"^root"' passwd
root:x:0:0:root:/root:/bin/bash
[root@wan day8]# awk -F: '$0~"^root"' passwd
root:x:0:0:root:/root:/bin/bash

-- 正则匹配一个范围
[root@wan day8]# awk '/^mail/,/^ftp/' passwd

-- 文件处理前后执行操作
[root@wan day8]# awk 'BEGIN {print "处理开始"};/^mail/,/^ftp/ ;END {print "处理结束"}' passwd

-- 显示系统用户名和id
[root@wan day8]# awk -F: 'BEGIN {printf "%-15s %s\n","USER:","NAME"} {printf "%-15s %s\n",$1,$3}' /etc/passwd

-- 取一个范围内的内容
[root@wan day8]# awk -F: '$3==0,$NF~/nologin$/' /etc/passwd

-- if 条件判断
[root@wan day8]# awk -F: '{if ($3==0) {print $1,"管理员"}}' /etc/passwd
[root@wan day8]# awk -F: '{if ($3==0) {print $1,"管理员"} else {print $1,"普通用户"}}' /etc/passwd

-- while循环
[root@wan day8]# awk 'BEGIN {i=1;while(i<=100) {sum+=i;i++};print sum}'

-- dowhile循环
[root@wan day8]# awk 'BEGIN {i=1;do{sum+=i;i++} while(i<=100) {print "1+2+3+..+100=",sum}}'

-- for循环
[root@wan day8]# awk 'BEGIN {for (i=1;i<=100;i++){sum+=i} print sum}'

你可能感兴趣的:(自动化运维,SHELL,awk,运维)