美文网首页我用 LinuxLinux学习之路技术文
linux系列_linux命令系列一 —— awk命令

linux系列_linux命令系列一 —— awk命令

作者: YONGSSU的技术站点 | 来源:发表于2016-09-03 10:32 被阅读136次

    awk命令

    #命令行方式
    awk [-F field-separator] 'commands' input-file(s)
    #shell脚本,将所有的awk命令插入一个文件,并使awk执行
    首行添加#!/bin/awk
    #j将所有的awk命令插入一个单独的文件,让后调用
    awk -f awk-script-file input-file(s)
    

    内置变量

    ARGC               命令行参数个数ARGV               命令行参数排列ENVIRON            支持队列中系统环境变量的使用FILENAME           awk浏览的文件名FNR                浏览文件的记录数FS                 设置输入域分隔符,等价于命令行 -F选项NF                 浏览记录的域的个数NR                 已读的记录数OFS                输出域分隔符ORS                输出记录分隔符RS                 控制记录分隔符
    

    awk工作流程

    • 先执行BEGIN,然后读取文件,读入/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0表示所有域,$1表示第一个域,$n表示第n个域,所有开始执行模式所对应的动作的action。接着开始读第二条记录。直到所有的记录都读完,最后执行END操作

    awk编程

    简单实例

    # 打印第一列
    #cat /etc/passwd |awk -F ':' '{print $1}' 
    
    # 打印第一列和第7列
    #cat /etc/passwd |awk -F ':' 'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'
    
    #统计/etc/passwd的账户人数
    awk '{count++;print $0;} END{print "user count is ", count}' /etc/passwd
    或者
    awk 'BEGIN {count=0;print "[start]user count is ", count} {count=count+1;print $0;} END{print "[end]user count is ", count}' /etc/passwd
    
    #统计某个文件夹下的文件占用的字节数
    ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}'
    #以M为单位ls -l |awk 'BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}'
    

    条件语句

    ls -l |awk 'BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}' [end]size is  8.22339 M
    

    循环语句and数组

    awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
    

    相关文章

      网友评论

        本文标题:linux系列_linux命令系列一 —— awk命令

        本文链接:https://www.haomeiwen.com/subject/mbmkettx.html