java中的接口是类吗
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~