Rocky基础之AWK

网友投稿 228 2022-11-05


Rocky基础之AWK

AWK基本用法很简单,但是高级用法又很难,毕竟是三个人开发出来的一门语言,下面简单介绍下awk的用法:

基本用法:

awk '{print $1}' /etc/passwd

##$1表示第一个域,通俗的讲就是第一列。这里没有指定分割符,默认以空格作为分隔符,passwd的空格都在行尾,所以会输出一整行,并且awk默认文件有几行,就输出几行;

awk -F: '{print $1}' /etc/passwd

##-F:表示以:为分隔符;

awk -F: '{print $0}' /etc/passwd

##$0表示输出整条记录(通俗的讲就是一行)

awk -v FS=":" -v OFS="++++" '{print $1,$3}' /etc/passwd    #以:为分隔符,取第一个和第三个域(列),输出分隔符是++++

awk -v RS=" " '{print $1}' /etc/passwd   #RS:输入记录record分隔符,指定输入时的换行符

awk -v RS=" " -v ORS="++" '{print $1}' /etc/passwd #ORS:输出记录分隔符,输出时用指定符号代替换行符

NF:字段数量

awk -F: '{print $1,$3,NF}' /etc/passwd #这里NF表示一共有几列(域)

awk -F: '{print $1,$3,$NF}' /etc/passwd #这里$NF表示最后一列字符(域)

NR:记录的编号

awk '{print NR,$0}' /etc/passwd /etc/issue

FNR:各文件分别计数,记录的编号

awk '{print FNR,$0}' /etc/passwd /etc/issue

awk '{print FNR}' /etc/fstab /etc/issue

FILENAME:当前文件名

awk '{print FILENAME}' /etc/issue /etc/fstab

awk '{print FNR,FILENAME,$0}' /etc/fstab /etc/issue

ARGC:命令行参数的个数

awk '{print ARGC}' /etc/fstab /etc/issue

ARGV:数组,保存的是命令行所给定的各参数,每一个参数:ARGV[0],......

awk '{print ARGC,ARGV[2]}' /etc/issue /etc/redhat-release

其他用法:

awk -F: '{printf "UserName: %-20s UUID: %d\n",$1,$3}' /etc/passwd

awk -F: '$3>=0 && $3<=1000{print $1}' /etc/passwd

awk -F: '$3==0 || $3>=1000{print $1}' /etc/passwd

awk -F: '!($3==0){print $1}' /etc/passwd

awk -F: '!($3>=100){print $1}' /etc/passwd

条件表达式(三目表达式)

df |awk -F"[ %]+" '{$5>=10?disk="full":disk="OK";printf "%10d %10s\n",$(NF-1),disk}'

条件判断 if-else

awk -F: '{if($3<=100){print "<=100",$3}else if($3<=1000){print "<=1000",$3}else {print ">=1000",$3}}' /etc/passwd

循环 while

awk -v i=1 -v sum=0 'BEGIN{while(i<=100){sum+=i;i++};print sum}'

awk '/^root/{i=1;while(i<=NF){print $i,length($i);i++}}' /etc/passwd

循环 do-while

awk 'BEGIN{total=0;i=1;do{total+=i;i++;}while(i<=100);print total}'

循环 for

awk 'BEGIN{for(i=1;i<=100;i++){if(i==50)break;sum+=i}print sum}'

awk 'BEGIN{total=0;for(i=1;i<=100;i++){total+=i}print total}

continue 和 break

echo 'dsFUs34tg*fs5a%8ar%$#@' |awk -F "" '{print $3}

awk 'BEGIN{for(i=1;i<=100;i++){if(i==50)break;sum+=i}print sum}'

awk 'BEGIN{for(i=1;i<=100;i++){if(i==50)continue;sum+=i};print sum}'

next

awk -F: '{if($3%2!=0) next;print $1,$3}' /etc/passwd

数组

awk 'BEGIN{array["i"]="x";array["j"]="y";print "i" in array ,"j" in array}'

awk 'BEGIN{arr["i"]=x;arr["j"]="y";if("i" in arr){print "cz"}else {print "no"}}'

awk -F: '{user[$1]=$3}END{for(i in user){print i,user[i]}}' /etc/passwd

ss -nat|awk 'NR!=1{state[$1]++}END{for(i in state){print i,state[i]}}'

awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' access.log |sort -rn


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:大数据Apache Druid(三):Druid集群搭建
下一篇:四六级成绩查询入口API(四六级成绩查询入口2021官网)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~