ITPub博客

首页 > Linux操作系统 > Linux操作系统 > awk 命令专题

awk 命令专题

原创 Linux操作系统 作者:fjzcau 时间:2015-02-08 22:11:22 0 删除 编辑

--截取文件abc.123.log
--一下结果都是abc.123

ls abc.123.log | awk -F'.'  'BEGIN{OFS="."} NF--'
ls abc.123.log | awk -F  .  'BEGIN{OFS="."} NF--' 

echo "abc.123.jpg" | awk -F .   'BEGIN{OFS="."}NF--'
echo "abc.123.jpg" | awk -F'.'  'BEGIN{OFS="."}NF--'
echo "abc.123.jpg" | awk -F"." 'BEGIN{OFS="."}NF--'
echo "abc.123.jpg" | awk -F "." 'BEGIN{OFS="."}NF--'

A=abc.123.jpg
name=${A%.*}

echo $name
abc.123

echo ${A%%.*}
abc

仅去除扩展名的话,其实一个%就行了,非贪婪匹配


--------------------------------------------------------------------------
awk '{}' /etc/passwd
awk '/root/{print $2,$1}'
awk -F: '$1~/root/{print  $1}'     /etc/passwd      第一列匹配root
awk 'BEGIN{a=1;print a}'          输出1
awk 'BEGIN{a=1;print a,a}'     输出1 1
awk 'BEGIN{a=1;print a a}'     输出11
awk 'BEGIN{a=1;print "a"}'     输出a
awk '{a=1;b=2;print $(a+b)}'<<<"aaa bbb ccc"          输出ccc
awk '/正则/{}  /正则/{}  /正则/{}'          执行多条指令
awk 'BEGIN{OFS=":"}{print $1,$2}'     改变默认输出的分割符为:,结果为moma:68.5
awk 'BEGIN{FS=":"}{print $1,$2}'          改变默认输入的分割符为:

printf:格式化输出
awk '{printf("\n"$0"\n")}'
awk '{printf("%s%s",$1,$2)}'
awk '{printf("%10s",$1)}'          使输出的字符串占10个宽度,默认靠右对齐
awk '{printf("%-10s",$1)}'          使输出的字符串占10个宽度,靠左对齐
awk '{printf("%10.3f",3.3333333)}'          使输出的字符串占10个宽度,,小数点后要三位,靠右对齐
awk '{a=123.456;printf("%d",a)}'          强制转换为整数,输出123

传递参数:
var=123
awk -v awkvar=$var '{print awkvar}'
awk {print "'$var'"}'

数组:
不必指明数组大小,下标可以为任意字符串
awk '{user[NR]=$0}END{print user[5]}'
awk '{IP[192.168.1.254]=254;IP[192.168.1.3]=3}END{for(i in IP){print i;print IP[i]}}' score.txt      打印下标不规整的数组
awk '{IP[$1]++}END{for(i in IP)print IP[i],i}' /etc/httpd/logs/access_log  |  sort -nr          统计日志中IP访问数量
awk 'BEGIN{print ENVIRON["USER"]}'          数组中使用环境变量

函数:
awk 'BEGIN{a=11.22;int(a);print a,int(a)}'          int函数,结果为:11.22 11
a=12313;print length(a)          取字符串的长度
awk 'BEGIN{t="hellolinux";r="x";s="hahaha";print sub(r,s,t),t}'     t原字符串,r要匹配的字符串,替换为s;替换成功返回1,匹配第一次出现
awk 'BEGIN{t="hellolinux";r="x";s="hahaha";print gsub(r,s,t),t}'     t原字符串,r要匹配的字符串,替换为s;替换成功返回1,全局匹配
awk 'BEGIN{ while(getline < "/etc/shadow" > 0) ;}'
BEGIN{FS=":";while((getline<"/etc/passwd")>0)name[$1]=$3}
{for(i in name){if(i==$1)print name[i],$2}}

awk     'BEGIN{
#               a=5
        }
        {      
               if(x~/abc/){          匹配
               }
#               if(a>3){
#                       print $1
#               }
#               grade=(avg>=60)?"Pass":"Fail"
#               while(a>3){
#                       print $1
#               }
                sum=0          
                for(i=2;i<=NF;i++){
                        sum+=$i
                }
                print $1,sum/(NF-1)
        }
        END{}' score.txt

--------------------------------------------------
系统启动过程:
grub -kernel initrd.img init /etc/inittab /etc/rc.d/rc.sysinit(/lib/module) rc5 rc.local server login /etc/profile
系统关闭过程
~/.bash_logout注销 关闭server killall杀掉进程 关机

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22661144/viewspace-1430654/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 多行的注释
下一篇: check_user.sh
请登录后发表评论 登录
全部评论

注册时间:2011-04-03

  • 博文量
    208
  • 访问量
    547151