打印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