linux awk

打印passwd文件第一列的:前的账户名
awk -F ‘:’ ‘{print &1}’ passwd

-(-F)后加分隔符
-':'  表示以冒号为分隔符
-在{}内写内容
-print 为函数
-$1: 固定写法,表示第一列
-$0:固定写法,表示整行
-'{print &1}'     单引号表示是给awk,而不是bash,否则bash会把$执行成取变量 ,双引号无法阻止bash解析$
如
echo "$sxt"    会打印sxt这个变量的内容
echo  '$sxt'   会打印$sxt

打印第一列和第七列,并在两列间添加制表符,并切在内容头打印name制表符和shell ,内容尾打印end

awk -F ‘:’ ‘BEGIN{print “name\tshell”} print{$1 “\t” $2 } END{print “end”}’

-BEGIN{}和END{}为声明函数名的函数,并且名称只能是BEGIN和END,并且分别只能写一个
-print{} 为匿名内部函数,可以写多个

打印包含root的整行
awk -F ‘:’ '/root/ {print $0} ’ passwd

统计passwd每行的行号和分割后的列数
awk -F ‘:’ ‘{print NR"\t"NF"\t"$0}’ passwd

-NR 每行的行号
-NF 每行按分隔符分隔后的总列数

awk 类c实现统计1月份的各用户的总钱数
在这里插入图片描述

awk ‘{split($3,date,"-"); if(date[2]==“01”){ name[$1]+=$5} } END{for(i in name){print i “\t” name[i]}}’

-默认按空格分割,所以不用加分割符
-split()函数,分别为要分割的数据,放进类似数组的数据结构,分割符
-name[$1],表示将当行的第一列作为类似数组的数据结构name的键值,此时放入的键值已相当于变量
-for(i in name) 增强for循环
-i此时是变量,直接打印输出变量名

结果:
在这里插入图片描述
在上一题基础上,实现输出0为manager,1为woker

awk ‘{split($3,date,"-");if(date[2]“01”){name[$1]+=$5;if($2"0"){role[$1]=“mana
ger”}else{role[$1]=“worker”}}} END{for(i in name){print i “\t"name[i]”\t"role[i] }}’ awk.txt

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值