awk语法

awk

语法结构

awk 选项 ‘命令部分’ 文件名
awk 选项 ‘BEGIN{开始处理之前};{处理中};END{处理结束后}’ 文件名

内部相关变量

$0 当前处理行的所有记录
$1,$2,$3 … $n 文件中每行以间隔符号分割的不同字段
NF 当前记录的字段数(列数)
$NF 最后一列
FNR/NR 行号
FS 定义间隔符
OFS 定义输出字段分隔符,默认空格
RS 输入记录分割符,默认换行
ORS 输出记录分割符,默认换行

测试命令

cp /etc/passwd passwd 数据准备
输出passwd 中按照:分割的行号,第一列,倒数第二列,最后一列,总列数

awk -F: '{print NR,$1,$(NF-1),$NF,NF}' passwd ;

在这里插入图片描述

awk 'BEGIN{FS=":";OFS="\t\t"};/^root/,/^lp/{print $1,$NF}' passwd

在这里插入图片描述

awk 'BEGIN{FS=":"};{printf "%-15s %-15s %-15s\n",$1,$6,$NF}' passwd

在这里插入图片描述

awk格式化

awk -F: 'BEGIN{ printf "%-15s %-15s\n","姓名","年龄"};/root/{printf "%-15s %-15s\n", $NF,$(NF-1)};END{print "************************"}' passw

%s 字符类型 strings %-20s
%d 数值类型
占15字符

  • 表示左对齐,默认是右对齐
    printf默认不会在行尾自动换行,加\n
    在这里插入图片描述

awk变量

awk -v num=1 'BEGIN{print num}'

流程控制语句

if …
awk -F: ‘{if($3>=500 && $3<=60000) {print $1,$3} }’ passwd
if…else语句:
awk -F: ‘{ if($3>=500 && $3 != 65534) {print $1"是普通用户"} else {print $1,“不是普通用户”}}’ passwd
if…else if…else语句:
awk -F: ‘{if($30) {print $1,“is admin”} else if($3>=1 && $3<=499 ||$365534) {print $1,“is sys users”} else {print $1,“is general user”} }’ a.txt
for循环
awk ‘BEGIN { for(i=1;i<=5;i++) {print i} }’
awk ‘BEGIN { i=1;while(i<=5) {print i;i++} }’

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值